Java根据二叉树的先序和后序得到二叉树

这篇具有很好参考价值的文章主要介绍了Java根据二叉树的先序和后序得到二叉树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一般情况下,我们会根据先序和后序写出二叉树,但是用代码怎末写呢?

例如:

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。

Java根据二叉树的先序和后序得到二叉树,数据结构,java练习题,Java,数据结构,java,算法

思路:我们先根据先序遍历找到根节点记录下来,在从中序数组中找到刚才记录下来根节点的下标,那么下标的左边就是根节点的左子树,后边就是根的右子树,依次递归求二叉树,递归截止条件在下图中说明:

开始状态

描述:

第一步,rootindex是根节点,begin和end是根节点的左右子树在中序数组的下标范围,下一步你们就明白了

Java根据二叉树的先序和后序得到二叉树,数据结构,java练习题,Java,数据结构,java,算法

第二步,我们找左子树,end=rootindex-1;begin不动

Java根据二叉树的先序和后序得到二叉树,数据结构,java练习题,Java,数据结构,java,算法

第三步,我们找右子树,end不动,begin=rootindex+1;

Java根据二叉树的先序和后序得到二叉树,数据结构,java练习题,Java,数据结构,java,算法

依次递归,每次都是先找根节点,再找左子树,后右子树,结束条件见就是begin>end的时候,解释:(相当于该节点是叶子节点)

Java根据二叉树的先序和后序得到二叉树,数据结构,java练习题,Java,数据结构,java,算法

代码展示:文章来源地址https://www.toymoban.com/news/detail-805421.html

  public  int preindex;//记录先序遍历的下标,如果放在递归的方法中递归后值发生改变
    public TreeNode buildTree(int[] preorder, int[] inorder) {
       return creatTree(0,inorder.length-1, preorder, inorder);
    }
    public TreeNode creatTree(int begin,int end,int [] preorder,int[] inorder){
        if (begin>end)return null;
        TreeNode root =new TreeNode(preorder[preindex]);
        int rootindex=find(begin, end, preorder[preindex], inorder);//获取根节点在中序数组中下标
        preindex++;
        root.left=creatTree( begin, rootindex-1, preorder, inorder);
        root.right=creatTree( rootindex+1, end, preorder, inorder);
        return root;
    }
    public int find(int begin,int end,int key,int[] inorder){
        for (int i = begin; i <=end ; i++) {
            if (inorder[i]==key)return i;
        }
        return -1;
    }

到了这里,关于Java根据二叉树的先序和后序得到二叉树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包