由二叉树的中序和后序遍历,得到前序遍历

直接上解决思路:

后序遍历的最后一个值就是根节点的值,然后在中序遍历中找到根节点的值,位于根节点之前的就是左子树,之后的就是右子树。递归解决问题

代码:

public static void preTraversing(TreeNode head){
        if (head==null){
            return;
        }
        System.out.print(head.val+" ");
        preTraversing(head.left);
        preTraversing(head.right);
    }
    public static TreeNode rebulid_BinaryTree(int[] a,int midstart,int midEnd,int[] b,int afterStart,int afterEnd,int length){
        if (a.length==0||b.length==0||length<=0){
            return null;
        }
        int value=b[afterEnd];
        TreeNode root=new TreeNode(value);
        if (length==1){
            return root;
        }
        int i=0;
        while(i<length){
            if (value==a[midEnd-i]){
                break;
            }
            i++;
        }
        root.left=rebulid_BinaryTree(a,midstart,midEnd-i-1,b,afterStart,afterEnd-i-1,length-1-i);
        root.right=rebulid_BinaryTree(a,midstart+i,midEnd,b,afterStart+i-1,afterEnd-1,i);
        return root;
    }

构造二叉树:

class TreeNode {
    public int val;
      public TreeNode left, right;
      public TreeNode(int val) {
          this.val = val;
          this.left = this.right = null;
      }
}

我的测试主类:

public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入你的节点数:");
        int n=sc.nextInt();
        int[] a=new int[n];
        int[] b=new int[n];
        System.out.println("请输入你的中序序列:");
        for (int i = 0; i < n; i++) {
            a[i]=sc.nextInt();
        }
        System.out.println("请输入你的后序序列:");
        for (int i = 0; i <n ; i++) {
            b[i]=sc.nextInt();
        }
        TreeNode head=rebulid_BinaryTree(a,0,a.length-1,b,0,b.length-1,b.length);
        System.out.println("你的二叉树前序遍历为:");
        preTraversing(head);
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值