博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Validate Binary Search Tree--判断一个树是不是二叉查找树(重重重)
阅读量:4109 次
发布时间:2019-05-25

本文共 1735 字,大约阅读时间需要 5 分钟。

问题:

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

confused what "{1,#,2,3}" means? 

解答:

根据二叉查找树的定义:

  • 结点node的左子树所有结点的值都小于node的值。
  • 结点node的右子树所有结点的值都大于node的值。
  • 结点node的左右子树同样都必须是二叉搜索树。
采用递归判断,在判断一个二叉树是否是二叉查找树的同时,需要返回该二叉查找树的最大和最小值,用于父节点判断。
参考:在判断一个树是否是平衡二叉树时返回二叉树的深度。()
如果该节点为空 那么直接返回 true。
如果该节点是叶子节点,返回 true, 该树的最大值和最小值都是node->val.
如果该节点的两个左右子树都是二叉查找树。
{
如果左子树为空,同时节点值小于右子树最小值。 是二叉查找树,更新Max = rightmax , min = node->val;
如果右子树为空,同时节点值大于左子树最大值。 是二叉查找树,更新max = node->val, min = leftmin;
如果左右子树都不为空,同时节点值大于左子树最大值,小于右子树最小值,是二叉树。更新max = rightmax, min = leftmin;
}
另外的几种解法:
还有一种中序遍历法没看懂,再看。
代码:

class Solution {public:    bool isValidBST(TreeNode *root) {        int max, min;		return isBST(root, max, min);    }	bool isBST(TreeNode *node, int &max, int &min)	{		int leftmax;		int leftmin;		int rightmax;		int rightmin;		if(node == NULL)			return true;		if(node->left == NULL && node->right == NULL)		{			max = node->val;			min = node->val;			return true;		}		else if(isBST(node->left, leftmax, leftmin) && isBST(node->right, rightmax, rightmin))		{			if(node->left == NULL && node->val < rightmin)			{				max = rightmax;				min = node->val;				return true;			}			else if(node->right == NULL && node->val > leftmax)			{				max = node->val;				min = leftmin;				return true;			}			else if(leftmax < node->val && node->val < rightmin)			{				max = rightmax;				min = leftmin;				return true;			}						return false;		}		else		{			return false;		}	}};

转载地址:http://gktsi.baihongyu.com/

你可能感兴趣的文章
OpenCV meanshift目标跟踪总结
查看>>
那些人生“开挂”的程序员,都在干什么?
查看>>
影响科学圈的那些计算机代码
查看>>
如何判断一家互联网公司要倒闭了?
查看>>
想快速上手机器学习?来看下这个 GitHub 项目!
查看>>
GitHub 标星 3.6k,一本开源的深度学习中文教程!
查看>>
9 款你不能错过的 JSON 工具
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!
查看>>
厉害了!Python 编辑器界的神器 Jupyter ,推出官方可视化 Debug 工具!
查看>>
卧槽!Java 虚拟机竟然还有这些性能调优技巧...
查看>>
听说玩这些游戏能提升编程能力?
查看>>
再见,Eclipse...
查看>>
如果你还不了解 RTC,那我强烈建议你看看这个!
查看>>
沙雕程序员在无聊的时候,都搞出了哪些好玩的小玩意...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
早知道这些免费 API,我就可以不用到处爬数据了!
查看>>