设为首页 加入收藏

TOP

leetcode―Validate Binary Search Tree
2015-07-24 05:01:02 来源: 作者: 【 】 浏览:6
Tags:leetcode Validate Binary Search Tree

描述:

?

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.

    ?

    confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.


    OJ's Binary Tree Serialization:

    The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.

    Here's an example:

       1
      / \
     2   3
        /
       4
        \
         5
    
    The above binary tree is serialized as "{1,2,3,#,#,4,#,#,5}".

    ?

    思路:

    由于二叉排序树和对二叉树的中序遍历所形成的值是有序的是充分必要条件,所以仅需对二叉树进行中序遍历即可,并将遍历的结点的值存储到一个list中,然后依次比较list中的值,是有序的则二叉树为二叉排序树,否则则不是。

    当然,一个更好的方法是用一个temp暂存上一个结点的值,然后依次进行比较即可。

    代码:

    ?

    public boolean isValidBST(TreeNode root) {
    		boolean flag=true;
    		List
        
         list=new ArrayList
         
          (); if(root==null) return flag; Stack
          
           st=new Stack
           
            (); st.push(root); TreeNode top=null; while(!st.empty()) { top=st.peek(); while(top.left!=null) { st.push(top.left); top=top.left; } while(top.right==null) { list.add(top.val); st.pop(); if(!st.empty()) top=st.peek(); else break; } if(!st.empty()) { list.add(top.val); st.pop(); st.push(top.right); } } int len=list.size(); int num=list.get(0),temp=0; for(int i=1;i
            
             temp) { flag=false; break; } num=temp; } return flag; }
            
           
          
         
        

    ?

    结果:

    \
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 2191 (多重背包) 下一篇C/C++学习 - gcc编译过程查看汇编..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: