您的位置:首页 > 其它

前序和中序、中序和后序确定二叉树

2018-03-31 14:47 204 查看

前序和中序、中序和后序确定二叉树

二叉树的遍历 .



前序:{a,b,d,f,g,e,c}

中序:{f,d,g,b,e,a,c}

后序:{f,g,d,e,b,c,a}

前序和中序确定二叉树



前序遍历结果首个元素必然是根节点,然后在中序遍历中查找该节点的位置,它的左边为他的左子树右边为它的右子树。



再次重复上诉操作后



`

public static BinaryTreeNode preInReConstructBinaryTree(char [] pre,char [] in) {

if(pre.length==0 || in.length==0){
return null;
}
BinaryTreeNode node =new BinaryTreeNode(pre[0]);
for(int i=0;i<in.length;i++){
//在中序中找到和根相同元素位置
if(in[i]==pre[0]){
node.leftNode=preInReConstructBinaryTree(Arrays.copyOfRange(pre, 1, i+1),Arrays.copyOfRange(in, 0, i));
node.rightNode=preInReConstructBinaryTree(Arrays.copyOfRange(pre,i+1 , pre.length),Arrays.copyOfRange(in, i+1, in.length));
}
}
return node;
}


`

中序和后序确定二叉树



后序遍历结果最后一个元素必然是根节点,然后在中序遍历中查找该节点的位置,它的左边为他的左子树右边为它的右子树。



再次重复上诉操作后



`

public static BinaryTreeNode inPostReConstructBinaryTree(char [] in,char [] post){
if(in.length==0 || post.length==0){
return null;
}
BinaryTreeNode node=new BinaryTreeNode(post[post.length-1]);
for(int i=0;i<in.length;i++){
if(in[i]==post[post.length-1]){
node.leftNode=inPostReConstructBinaryTree(Arrays.copyOfRange(in,0,i),Arrays.copyOfRange(post,0,i));
node.rightNode=inPostReConstructBinaryTree(Arrays.copyOfRange(in,i+1,in.length),Arrays.copyOfRange(post,i,post.length-1));
}
}
return node;
}


`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐