Leetcode-98: Validate Binary Search Tree

来源:互联网 发布:饥饿游戏知乎 编辑:程序博客网 时间:2024/06/06 04:46

Given a binary tree, determine if it is a valid binary search tree (BST).

Assume a BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

Example 1:

    2   / \  1   3
Binary tree [2,1,3], return true.

Example 2:

    1   / \  2   3
Binary tree [1,2,3], return false.


验证一颗二叉树是否是搜索二叉树。(不允许重复键的二叉树)

标签:深度优先搜索。


思路:对于二叉树的深度优先搜索实际上就是先序遍历(preorder traversal)和中序遍历(inorder traversal),两者的入栈和出栈顺序是一样的,区别在于:遍历到节点A时,先序遍历先访问节点A,再遍历A的左子节点;中序遍历则先遍历左子节点,出栈后再访问节点A。

由于对于搜索二叉树来说,有一个特殊的性质,即中序遍历后的结果是升序的(这里需要注意,如果允许重复键的话,搜索二叉树要求左子树的键不大于根节点的键,此时无法直接用中序遍历来验证是否是搜索二叉树,因为无法区分l<= root < r和 l < root <= r)。


/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */class Solution {    private long prev = (long)Integer.MIN_VALUE - 1;        public boolean isValidBST(TreeNode root) {         return inorder(root);    }        private boolean inorder(TreeNode h) {        if (h == null)            return true;        if (!inorder(h.left))            return false;        if (h.val > prev)            prev = h.val;        else            return false;        return inorder(h.right);    }}

原创粉丝点击