博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode系列]BST有效性确定问题[前序遍历]
阅读量:7087 次
发布时间:2019-06-28

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

给定一个BST的根节点, 试判断此BST是否为符合规则的BST?

规则: 对于一个BST的节点,

  • 它左侧的所有节点(包括子节点)必须小于它本身;
  • 它右侧的所有节点(包括子节点)必须大于它本身;
  • 它的左右节点也必须满足上面两条.

算法思路: 对于给定的根节点N, 先找到它左子节点L的最底层的右子节点MR, 比较MR和N的值, 如果 MR >= N, 则返回false; 再找到N右子节点R的最底层的左子结点ML, 比较ML和N的值, 如果 ML <= N, 则返回false; 最后, 递归遍历左右节点, 将两者的返回值取逻辑与后返回.

 

代码:

1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 public:12     bool isValidBST(TreeNode *root) {13         if (NULL == root) return true;14         TreeNode *left = root->left, *right = root->right;15         if (left) {16             TreeNode *pre = left;17             while (pre->right) pre = pre->right;18             if (pre->val >= root->val) return false;19         }20         if (right) {21             TreeNode *post = right;22             while (post->left) post = post->left;23             if (post->val <= root->val) return false;24         }25         return (isValidBST(left) && isValidBST(right));26     }27 };

 

转载于:https://www.cnblogs.com/lancelod/p/3962568.html

你可能感兴趣的文章
MacOS系统Docker默认存储路径迁移方法
查看>>
vscode插件开发实践与demo源码
查看>>
初学UI小知识总结
查看>>
Kotlin--高阶函数
查看>>
多阶段决策问题——DAG(算法竞赛入门经典笔记)
查看>>
UI分析工具YourView开源—App开发者不可多得的利器!
查看>>
记录一次jenkins的部署和使用
查看>>
vscode专题
查看>>
前端基础17:对象/实例/原型
查看>>
tornado 源码之 iostream.py
查看>>
Javascript基础学习干货教程(3)
查看>>
JAVA 泛型理解
查看>>
Git常用命令清单,掌握这些,轻松驾驭版本管理
查看>>
同事说我「变」了
查看>>
Activiti6.0 java项目框架 spring5 SSM 工作流引擎 审批流程
查看>>
SQL 语法速成手册
查看>>
使用nginx控制ElasticSearch访问权限
查看>>
JVM必问知识点:类加载过程
查看>>
Markodwn 标题对齐的同步滚动
查看>>
Flutter 界面路由浅析
查看>>