判断一棵树是不是二叉搜索树
来源:互联网 发布:大麦户源码安装教程 编辑:程序博客网 时间:2024/06/05 05:21
背景:LeetCode - 98. Validate Binary Search Tree
方法:
我们先要看看二叉搜索树的定义,根节点的值要大于左子树的任意节点的值,小于右子树任意节点的值,而且左右子树都是二叉搜索树。
那我们我们要获取左右子树的最大值和最小值,用左子树的最大值与右子树的最小值比较。满足大小关系,而且左右子树都是二叉搜索树这个时候这棵树就是二叉搜索树,同时,利用求出来的左右子树最大最小值和根节点的值更新出当前树的最大最小值,最后回溯。
代码:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: bool isValidBST(TreeNode* root) { if (root == NULL) return true; int minn, maxn; return dfs(root, minn, maxn); }private: bool dfs(TreeNode *root, int &minn, int &maxn) { if (root == NULL) return true; if (root->left == NULL && root->right == NULL) { maxn = minn = root->val; return true; } bool l, r; int min1, min2, max1, max2; if (root->left == NULL) { r = dfs(root->right, min2, max2); minn = min(root->val, min2); maxn = max(root->val, max2); return r && root->val < min2; } if (root->right == NULL) { l = dfs(root->left, min1, max1); minn = min(root->val, min1); maxn = max(root->val, max1); return l && root->val > max1; } l = dfs(root->left, min1, max1); r = dfs(root->right, min2, max2); minn = min(min(min1, min2), root->val); maxn = max(max(max1, max2), root->val); return l && r && max1 < root->val && min2 > root->val; }};
0 0
- 判断一棵树是不是二叉搜索树
- 判断一棵树是不是二叉搜索树
- HDU-3791-判断一棵树是不是二叉搜索树
- 判断一棵树是不是平衡二叉树
- 判断一棵树是不是满二叉树
- 判断一棵树是不是完全二叉树
- 判断一棵树是不是完全二叉树
- 二叉搜索树(篇1)判断数组是不是二叉搜索树后序遍历的结果
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡[
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断是不是平衡二叉树
- 判断二叉树是不是平衡
- 判断二叉树是不是平衡
- 判断是不是完全二叉树
- 二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
- 有了malloc/free,为什么还要new/delete
- 使用libjpeg区域显示超大图
- AOJ.859 地毯填补问题 (递归与分治)
- 安装maven遇到的问题
- Tensorflow实现最近邻
- 判断一棵树是不是二叉搜索树
- xCode8 ios10再次开发记录
- LeetCode刷题(C++)——Construct Binary Tree from Inorder and Postorder Traversal(Normal)
- 第二章 递归
- CSDN日报20170428 ——《你的开发为何如此低效?》
- 网络层-ICMP(互联网消息控制协议)
- Linux基础学习笔记之screen命令
- 关于三级管总结
- 作业优先调度算法 先来先服务、短作业调度算法(c语言描述)