判断二叉树的后序遍历序列是否合法

来源:互联网 发布:程序员转行适合做什么 编辑:程序博客网 时间:2024/06/05 17:29

题目:输入一个整数数组,判断该数组是不是某个二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false.假设输入的数组任意两个数字都不相同。

分析:
二叉树的后序遍历的结果中,最后一个是根节点,从头开始比较数组与根节点,如果大于根节点则停止,停止位置之前就是左子树,之后到倒数第二个节点就是右子树,然后使用递归分别对左子树和右子树进行操作。具体代码如下:

package problem2;import java.awt.peer.RobotPeer;/** * @author Hutongling * * @time:2017年3月21日 上午10:02:43 */public class 二叉搜索树的后序遍历序列是否合法 {    public boolean verifySequenceOFBST(int[] list,int length){        if(list ==null || length==0)            return false;        int root=list[length-1];        //在二叉搜索树中的左子树的节点小于根节点        int i=0;        for(;i<length-1;++i){            if(list[i]>root)                break;        }        //在二叉搜索树中的右子树的节点大于根节点        int j=i;        for(;j<length-1;++j)            if(list[j]<root)                return false;        //判断左子树是不是二叉搜索树        boolean left=true;        if(i>0)            left=verifySequenceOFBST(list,i);        //判断右子树是不是二叉搜索树        boolean right=true;        if(i<length-1){            int rightList[] = new int[list.length - i - 1];            System.arraycopy(list, i, rightList, 0, list.length - i - 1);            right=verifySequenceOFBST(rightList, length-i-1);        }        return (left && right);    }    public static void main(String[] args) {        //int data[]={5,7,6,9,11,10,8};        //int data[]={7,4,5,6};        int data[]={1,4,3,2};        二叉搜索树的后序遍历序列是否合法 test=new 二叉搜索树的后序遍历序列是否合法();        //boolean result=test.weatherPostOrderListIsLeagal(data);        boolean result=test.verifySequenceOFBST(data,data.length);        System.out.println(result);    }}

代码结果: true.

0 0
原创粉丝点击