根据树的后序和中序序列或者前序和中序序列构建二叉树,
来源:互联网 发布:淘宝网恐龙玩具 编辑:程序博客网 时间:2024/05/16 09:02
(1)根据中序遍历和后序遍历树构造二叉树
注意事项你可以假设树中不存在相同数值的节点
样例
给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]
返回如下的树:
2
/ \
1 3
import java.util.Arrays;import java.util.Scanner;/** * 根据中序遍历和后序遍历树构造二叉树 注意事项你可以假设树中不存在相同数值的节点样例给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2]返回如下的树: 2 / \1 3 * * @author Dell * */public class Test72 {public static TreeNode buildTree(int[] mid,int[] post) { if(post.length>0) { TreeNode t=new TreeNode(post[post.length-1]); int index=find(mid,post[post.length-1]); int[] mid1=Arrays.copyOfRange(mid, 0, index); int[] post1=Arrays.copyOfRange(post, 0, index); int[] mid2=Arrays.copyOfRange(mid, 1+index, mid.length); int[] post2=Arrays.copyOfRange(post,index, post.length-1); t.left=buildTree(mid1,post1); t.right=buildTree(mid2,post2); return t; } return null; }public static int find(int[] a,int target) { int index=-1; for(int i=0;i<a.length;i++) { if(a[i]==target) {index=i; break; } } return index; }public static void preorder(TreeNode t){if(t!=null){System.out.print(t.val+" ");preorder(t.left);preorder(t.right);}}public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int []mid=new int[n]; int []post=new int[n]; for(int i=0;i<n;i++) { mid[i]=sc.nextInt(); } for(int i=0;i<n;i++) { post[i]=sc.nextInt(); } TreeNode t= buildTree(mid,post); preorder(t);}}
(2)根据前序遍历和中序遍历树构造二叉树.
注意事项你可以假设树中不存在相同数值的节点
您在真实的面试中是否遇到过这个题? Yes
样例
给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树:
2
/ \
1 3
import java.util.Arrays;import java.util.Scanner;/** * * 根据前序遍历和中序遍历树构造二叉树. 注意事项你可以假设树中不存在相同数值的节点您在真实的面试中是否遇到过这个题? Yes样例给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树: 2 / \1 3 * @author Dell * */class TreeNode{public int val;public TreeNode left;public TreeNode right;public TreeNode(int val){this.val=val;this.left=this.right=null;}}public class Test73 { public static TreeNode buildTree(int[] pre,int[] mid) { if(pre.length>0) { TreeNode t=new TreeNode(pre[0]); int index=find(mid,pre[0]); int[] pre1=Arrays.copyOfRange(pre, 1, 1+index); int[] mid1=Arrays.copyOfRange(mid, 0, index); int[] pre2=Arrays.copyOfRange(pre, 1+index, pre.length); int[] mid2=Arrays.copyOfRange(mid, index+1, mid.length); t.left=buildTree(pre1,mid1); t.right=buildTree(pre2,mid2); return t; } return null; } public static int find(int[] a,int target) { int index=-1; for(int i=0;i<a.length;i++) { if(a[i]==target) {index=i; break; } } return index; }public static void postorder(TreeNode t) { if(t!=null) { postorder(t.left); postorder(t.right); System.out.print(t.val+" "); } }public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int []pre=new int[n]; int []mid=new int[n]; for(int i=0;i<n;i++) { pre[i]=sc.nextInt(); } for(int i=0;i<n;i++) { mid[i]=sc.nextInt(); } TreeNode t= buildTree(pre,mid); postorder(t);}}
阅读全文
0 0
- 根据树的后序和中序序列或者前序和中序序列构建二叉树,
- 根据中序序列和前序序列,求二叉树的后序序列
- 根据二叉树的前序序列和中序序列得到后序序列
- 已知二叉树的中序和前序(或者后序)序列求解树
- 二叉树序列---根据后序和中序系列或前序和中序序列构造二叉树
- 由二叉树的前序序列和中序序列构建二叉树
- 根据前序和中序序列重建二叉树
- 根据前序和中序序列确定二叉树
- 根据前序和中序列 重建二叉树
- 面试题6:根据前序和中序序列构建二叉树(Leetcode-106)
- 由前序和中序序列构建二叉树
- 中序和前序序列构建二叉树
- 根据二叉树的前序遍历序列和中序遍历序列求二叉树的后序遍历序列
- 根据树的前序和中序序列求出后序序列
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- 已知二叉树的前序序列和中序序列,求二叉树的后序序列
- 根据二叉树的先序序列和中序序列还原二叉树并打印后序序列
- 已知二叉树的中序序列和前序序列(或后序)求解树
- 【OpenCV3】将图像指定区域使用另一图像(或ROI)覆盖
- 多人在线网络游戏实现细节
- mysql之 xtrabackup原理、备份日志分析、备份信息获取
- Django Channels 学习笔记
- Winform窗口去边框实现可以移动
- 根据树的后序和中序序列或者前序和中序序列构建二叉树,
- Oracle-Oracle数据库结构
- 新版方正教务系统爬虫
- json转换
- shell 遍历目录下后缀名为.html的文件,并替换文件中内容
- oracle事务处理
- CentOS6.8安装Oracle12C数据库
- mybatis批量操作Oracle数据
- 微信支付之企业付款