根据树的后序和中序序列或者前序和中序序列构建二叉树,
2017-06-02 13:17
399 查看
(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
;
int []post=new int
;
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
;
int []mid=new int
;
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);
}
}
相关文章推荐
- 【构建二叉树】01根据前序和中序序列构造二叉树【Construct Binary Tree from Preorder and Inorder Traversal】
- 面试题6:根据前序和中序序列构建二叉树(Leetcode-106)
- 根据前序遍历(或者是后序遍历)和中序遍历得到的序列可以重建二叉树
- POJ 2255 根据二叉树的前序和中序序列来重建二叉树
- 【构建二叉树】02根据中序和后序序列构造二叉树【Construct Binary Tree from Inorder and Postorder Traversal】
- 机试指南-根据二叉树的前序和中序确定后序序列
- 根据前序和中序序列重建二叉树
- 根据二叉树的前序和中序构建二叉树
- 根据前序和中序的遍历序列重建二叉树
- 根据前序中序序列构建二叉树
- 根据给定的序列构建/判断二叉树
- 根据前序和中序序列,建立二叉树(java实现)
- 剑指offer04--根据前序和中序构建二叉树
- 根据前序和中序序列建造一个二叉树并且输出后序序列
- 根据前序和中序列 重建二叉树
- 二叉树系列——根据前序和中序、中序和后序构建二叉树
- 根据二叉树的前序和中序序列来重建二叉树
- 根据前序和中序遍历序列重构二叉树 代码完整版
- 根据中序序列与后序序列构建二叉树
- 某国内IT大牌名企校招笔试 + 树的学习—(递归构建二叉树、递归非递归前序中序后序遍历二叉树、根据前序序列、中序序列构建二叉树)