[路飞]_leetcode-面试题 04.05-合法二叉搜索树

106 阅读1分钟

题目描述

[题目地址]

实现一个函数,检查一棵二叉树是否为二叉搜索树。

示例 1:

输入: 
    2
   / \
  1   3
输出: true

示例 2:

输入: 
    5
   / \
  1   4
     / \
    3   6
输出: false
解释: 输入为: [5,1,4,null,null,3,6]。
     根节点的值为 5 ,但是其右子节点值为 4

解题思路

二叉搜索树的性质:
对于任意一棵子树,根节点的值大于左子节点的值,根节点的值小于右子节点的值

基于以上二叉搜索树的性质,如果对二叉搜索树进行中序遍历的话,将会得到一个严格升序的序列,
所以,我们可以对输入二叉树进行中序遍历,如果遍历过程中发现节点值违反了严格升序的性质,则说明当前二叉树不是二叉搜索树。

代码实现

var isValidBST = function(root) {
  let stack = [];
    let inorder = -Infinity;
    while(stack.length || root !== null){
        while(root !== null){
            stack.push(root);
            root = root.left
        }
        root = stack.pop();
        // 如果中旬遍历得到的节点的值小于等于前一个inoder,说明不是儿茶搜索树
        if(root.val <= inorder){
            return false;
        }
        inorder = root.val;
        root = root.right;
    }
    return true;

至此我们就完成了 leetcode-面试题 04.05-合法二叉搜索树