二叉树系列---判断给定的二叉树是否为二叉查找树

来源:互联网 发布:英魂之刃刷点卷软件 编辑:程序博客网 时间:2024/06/05 05:33

题目

判断给定的二叉树是否为二叉查找树

方法1

递归判断:先判断左子树是否为二叉查找树;再判断右子树;最后判断根(根小于左子树的最大节点值,大于右子树的最左节点值);

public boolean isValidBST(TreeNode root){        if(root==null){            return true;        }        if(root.left==null && root.right==null){            return true;        }        boolean l=isValidBST(root.left);        boolean r=isValidBST(root.right);        boolean res=l && r;        if(root.left!=null){            TreeNode lnode=root.left;            while(lnode.right!=null){                lnode=lnode.right;            }            if(lnode.val<root.val){                res=res && true;            }else{                res=false;            }        }        if(root.right!=null){            TreeNode rnode=root.right;            while(rnode.left!=null){                rnode=rnode.left;            }            if(rnode.val>root.val){                res=res && true;            }else{                res=false;            }        }        return res;         }

方法2

利用二叉查找树的性质:二叉查找树的中序遍历是有序的(从小到大);
先进行中序遍历得到中序序列,再判断中序序列是否有序;

public boolean isValidBST(TreeNode root){        ArrayList<Integer> inOrderList=new ArrayList<Integer>();        inOrder(inOrderList,root);        for(int i=0;i<inOrderList.size()-1;i++){            if(inOrderList.get(i)>=inOrderList.get(i+1)){                return false;            }        }        return true;    }    //得到中序序列    private void inOrder(ArrayList<Integer> inOrderList, TreeNode root) {        if(root==null){            return;        }        inOrder(inOrderList,root.left);        inOrderList.add(root.val);        inOrder(inOrderList,root.right);    }
0 0
原创粉丝点击