从中序与后序遍历中构造二叉树-p106--数组,二叉树遍历

package tree;

public class p106 {
    private int index;
    public TreeNode buildTree(int[] inorder, int[] postorder) {
        TreeNode root;
        index=postorder.length-1;
        root=getNode(inorder,postorder);
        return root;
    }

    public TreeNode getNode(int[] inorder, int[] postorder){
        if(inorder.length<=0){
            index++;    //当输入为空时
            return null;
        }
        if(inorder.length==1)return new TreeNode(postorder[index]);       //只有一个节点直接返回
        TreeNode node=new TreeNode(postorder[index]);
        //找到inorder中index的位置
        int i,order=-1;
        for(i=0;i<inorder.length;i++){
            if(inorder[i]==postorder[index]){
                order=i;
                break;
            }
        }
        //获得右子树
        int rightNode[]=new int[inorder.length-1-order];
        System.arraycopy(inorder,order+1,rightNode,0,rightNode.length);
        index--;
        node.right=getNode(rightNode,postorder);
        //获得左子树
        int leftNode[]=new int[order];
        System.arraycopy(inorder,0,leftNode,0,leftNode.length);
        index--;
        node.left=getNode(leftNode,postorder);
        return  node;
    }

    public static void main(String argv[]){
        int []inorde={2,1};
        int []postorder={2,1};
        p106 temo=new p106();
        TreeNode root=temo.buildTree(inorde,postorder);
    }
}



class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

后序数组的倒序顺序是每一个子树的根节点,在中序数组找到每一个根节点,然后根据它将数组分成左右两部分就得到了左右子树,按照这个定律循环递归求根节点与其左右子树

全部评论

相关推荐

不愿透露姓名的神秘牛友
03-20 22:18
FightingNa...:小厂不喜欢离毕业还远的。培养你三个月小半年,你又回去上学,你丰富简历爽歪歪,小厂啥也得不到。大厂兴许愿意培养你,可以试试大厂,准备下不黑了就行。
点赞 评论 收藏
分享
04-03 09:32
已编辑
华南农业大学 golang
我的代码出BUG了:"晚点发个邮件调整一下时间",你收到新的邮件没,如果没有收到新的邮件,那就需要进入面试链接留痕,否则系统会判定你迟到
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务