判断二叉树是否是二叉搜索树

来源:互联网 发布:ubuntu 如何使用汉语 编辑:程序博客网 时间:2024/06/05 00:17
方法一:利用中序遍历
/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */import java.util.*;public class Solution {    public boolean isValidBST(TreeNode root) {        ArrayList<TreeNode> list = new ArrayList<TreeNode>();        if(root ==null)            return true;        inorder(root,list);        for(int i=0;i<list.size()-1;i++){            if(list.get(i).val>=list.get(i+1).val)                return false;        }        return true;    }    public static void inorder(TreeNode root,ArrayList<TreeNode> list){        if(root!=null){            inorder(root.left,list);            list.add(root);            inorder(root.right,list);        }    }
方法二:
/** * Definition for binary tree * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */import java.util.*;public class Solution {    public boolean isValidBST(TreeNode root) {      if(root==null)          return true;        Stack<TreeNode> stack = new Stack<>();        TreeNode cur = root;        TreeNode pre = null;        while(!stack.isEmpty() || cur!=null){            if(cur==null){                cur = stack.pop();                if(pre!=null && pre.val>=cur.val)                    return false;                pre = cur;                cur = cur.right;            }else{                stack.push(cur);                cur = cur.left;            }        }        return true;    }}
阅读全文
0 0