检查是否为BST
2016-08-12 00:00
141 查看
请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。
一般可以有两种,都贴出来:
第二种,这种比较抽象,需要再思考一下
一般可以有两种,都贴出来:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Checker { public: bool checkBST(TreeNode* root) { return checkBST(root, INT_MIN, INT_MAX); } bool checkBST(TreeNode* root, int leftVal, int rightVal){ if(root->val > leftVal && root->val < rightVal){ if(root->left){ if(!checkBST(root->left, leftVal, root->val)) return false; } if(root->right){ if(!checkBST(root->right,root->val, rightVal)) return false; } return true; } return false; } };
第二种,这种比较抽象,需要再思考一下
TreeNode* pre = NULL; bool checkBST(TreeNode* root) { if(Inorder(root)!=NULL) return false; return true; } TreeNode* Inorder(TreeNode *root) { if(root==NULL) return NULL; TreeNode* left=Inorder(root->left); if(left!=NULL) return left; if(pre!=NULL&&pre->val>root->val) return root; pre = root; TreeNode *right=Inorder(root->right); if(right!=NULL) return right; return NULL; }
相关文章推荐
- 程序员面试金典-4.5检查是否为BST
- 检查是否为BST
- 《程序员面试金典》检查是否为BST
- 检查是否为BST
- 二叉树---检查是否为BST
- 98.Validate Binary Search Tree&检查是否为BST
- 检查是否为BST
- 16.检查是否为BST
- 程序员面试金典: 检查是否为BST、 寻找下一个结点
- 检查是否为BST
- 检查是否为BST
- PathFileExists检查文件是否存在
- Instruments-Automation:在点击操作前检查元素是否存在
- 检查蓝牙是否连接
- 第十二周 项目4 利用遍历思想求解图问题(检查是否有简单路径)
- 检查是否ie6
- android 检查网络是否可用,如果不可用弹出设置,让用户改变
- iOS通讯录操作封装(添加联系人、检查号码是否存在)
- Android 检查悬浮窗权限是否打开
- 如何检查你的 Linux 系统是否存在 Meltdown 或者 Spectre 漏洞 | Linux 中国