ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

43 验证二叉搜索树

43 验证二叉搜索树

给定一个二叉搜索树的根节点root,和一个整数k,请你设计一个算法查找其中第k小的元素(k从 1 开始计数)。

示例 1:

输入:root = [3,1,4,null,2], k = 1输出:1

示例 2:

输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3

提示:

  • 树中的节点数为n。
  • 1 <= k <= n <= 104
  • 0 <= Node.val <= 104

验证

1、当前节点小于他的右子树节点,大于左子树的节点,然后遍历整颗树

2、如果该二叉树的左子树不为空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;它的左右子树也为二叉搜索树。

3、判断节点是否满足大小,需要维护一个范围的区间。先遍历根节点,根节点的范围是正无穷到负无穷,左子节点的范围是(-无穷,根节点大小),右子节点的范围是(根节点大小,正无穷)

以此类推。

bool comPareNode(TreeNode* node,long long left,long long right){ if(!node) return true; if(node->val<=left||node->val>=right) return false; return comPareNode(node->left,left,node->val)&&comPareNode(node->right,node->val,right); } bool isValidBST(TreeNode* root) { if(!root) return true; return comPareNode(root,LONG_MIN,LONG_MAX); }

推荐一个零声教育学习教程,个人觉得老师讲得不错,分享给大家:[Linux,Nginx ,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,点击立即学习:链接

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进