码迷,mamicode.com
首页 > 编程语言 > 详细

[LeetCode] 98. Validate Binary Search Tree Java

时间:2017-07-14 21:15:47      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:nbsp   需要   int   编程   else   arch   子节点   boolean   理论   

题目:

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.

题意及分析:给出一课书,要求判断该树是不是二叉搜索树。二叉搜索树按照中序遍历得到的是一个升序序列,那么这道题只需要对树进行中序遍历即可,使用stack保存中间结果。这里需要注意的是理论最小值的获取,这里先获取最小值,然后当遍历到这个点时不需要做判断。

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isValidBST(TreeNode root) {
        if(root==null||(root.left==null&&root.right==null)) return true;
        TreeNode minNode = root;
        while(minNode.left!=null){
            minNode=minNode.left;
        }
        long nowMax=minNode.val;        //找到理论的最小值点
        Stack<TreeNode> stack = new Stack<>();
        TreeNode node = root;
        stack.add(node);
        while(node.left!=null||!stack.isEmpty()){
            if(node.left!=null){    //一直找到最左子节点
                node = node.left;
                stack.add(node);
            }else{      //输出该点,对栈当前点的右节点做相同操作
                TreeNode now = stack.pop();
                if(now!=minNode){
                    if(now.val>nowMax){  //如果当前大于遍历的上一个那么当前最大值编程当前点最大值
                        nowMax = now.val;
                    }else{      //按照中序遍历输出,结果当前输出比上一个数小,那么直接返回false
                        return false;
                    }
                }
                if(now.right!=null) {
                    node = now.right;
                    stack.add(node);        //将当前点加入stack中
                }
            }
        }
        return true;
    }
}

 

  

 

[LeetCode] 98. Validate Binary Search Tree Java

标签:nbsp   需要   int   编程   else   arch   子节点   boolean   理论   

原文地址:http://www.cnblogs.com/271934Liao/p/7172124.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!