根据先序遍历和中序遍历创建二叉树
来源:互联网 发布:java aop记录日志 编辑:程序博客网 时间:2024/05/22 03:38
算法思想
先序遍历的顺序是根左右,中序遍历的顺序是左根右。根据这一特性,先序遍历的第一个元素肯定是根节点。所以我们只要在中序遍历中找到该根节点的值,根节点以左就是它的左子树,根节点以右就是它的右子树,然后就可以递归的方式创建二叉树
假设现在有一颗二叉树如下
先序序列为(18,14,7,3,11,22,35,27)
中序序列为(3,7,11,14,18,22,27,35)
首先根据先序序列得二叉树的根节点是18,然后根据给定的先序序列可以得知18的左子树的中序序列为(3,7,11,14,),18的右子树的中序序列为(22,37,35),18的左子树的先序序列为(14,7,3,11),18的右子树的先序序列为(22,35,37),进而对18的左右子树分别类推进行处理,便可以确定整颗二叉树。
public static TreeNode createByPreAndIn(Object[] pre,Object[] in,int preStart,int preEnd,int inStart,int inEnd){ TreeNode root=null; if(pre==null||in==null||pre.length==0||in.length==0||pre.length!=in.length||preStart>preEnd||inStart>inEnd) return null; root=new TreeNode(pre[preStart]); int j=0; for(j=inStart;j<=inEnd;j++){ if(pre[preStart]==in[j]){ root.leftChild=createByPreAndIn(pre, in, preStart+1, preStart+j-inStart, inStart, j); root.rightChild=createByPreAndIn(pre, in, preStart+j-inStart+1, preEnd, j+1, inEnd); } } return root;}
输出
public static void main(String[] args) { Object[] pre={18,14,7,3,11,22,35,27}; Object[] in={3,7,11,14,18,22,27,35}; TreeNode root=createByPreAndIn(pre, in, 0, pre.length-1, 0, in.length-1); System.out.print("先序序列为:"); preOrder(root); System.out.println(); System.out.print("中序序列为:"); inOrder(root); System.out.println(); System.out.print("后序序列为:"); postOrder(root); System.out.println(); System.out.print("层次遍历为:"); levelOrder(root); }
二叉树遍历的过程可以参考二叉树的创建,递归遍历以及非递归遍历
阅读全文
0 0
- 根据中序遍历和先序遍历,后序遍历创建二叉树。
- 根据先序遍历和中序遍历创建二叉树
- 根据先序遍历和中序遍历创建二叉树
- 先序遍历和中序遍历创建二叉树
- 根据先序和中序遍历重建二叉树
- 根据中序遍历和后序遍历求二叉树的先序遍历
- 根据二叉树的先序遍历和中序遍历建立二叉树
- 根据二叉树的先序遍历和中序遍历重构二叉树
- 数组实现根据二叉树的先序遍历和中序遍历构造二叉树
- 根据二叉树的先序遍历和中序遍历重建二叉树
- 【二叉树】 根据先序和中序遍历输出后序遍历
- 根据二叉树的先序和中序遍历求出其后序遍历
- 1935. 二叉树重建(根据先序遍历和中序遍历重建二叉树并进行广度优先遍历)
- 二叉树遍历 ,根据先序和中序遍历序列建树
- 根据先序遍历和中序遍历重建二叉树的两种方法
- [LeetCode]105 根据先序遍历和中序遍历构建二叉树
- 根据先序遍历序列和中序遍历序列重建二叉树
- 根据先序遍历和中序遍历生成二叉树
- SVN目录带日志迁徙流程
- html css 滚动条样式
- 绝对地址相对地址
- hdu1510(矩阵找矩形)
- 1197约瑟夫问题
- 根据先序遍历和中序遍历创建二叉树
- Unsafe与CAS
- 连通性查询
- Linux下安装jdk
- 模块概念与使用及注意事项
- C# 中的委托和事件(详解)
- 初学 extJS 与 React 知识总结 (一)
- JVM内存模型
- 求两个单链表的差集和并集