0
点赞
收藏
分享

微信扫一扫

Java面试:重建二叉树题目


题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。

解答:

public static void main(String[] args) {
//前序遍历数
int [] preNode ={1,2,4,7,3,5,6,8};
//中序遍历数
int [] infixNode ={4,7,2,1,5,3,8,6};

TreeNode treeNode = rebuildTree(preNode, infixNode);

System.out.println(treeNode);

}

private static TreeNode rebuildTree(int [] preNode,int [] infixNode){
if(null == preNode|| null == infixNode || preNode.length ==0 ||
infixNode.length ==0 || preNode.length != infixNode.length){
return null;
}
TreeNode treeNode = new TreeNode(preNode[0]);
for(int i =0 ; i < preNode.length ; i++){
treeNode.leftNode= rebuildTree(Arrays.copyOfRange(preNode,1,i+1),Arrays.copyOfRange(infixNode,0,i));
treeNode.rightNode =rebuildTree(Arrays.copyOfRange(preNode,i+1,preNode.length),Arrays.copyOfRange(infixNode,i+1,infixNode.length));
}
return treeNode;
}

TreeNode类如下:

public class TreeNode {
private int value;

TreeNode leftNode;

TreeNode rightNode;

public TreeNode(int value) {
this.value = value;
}


@Override
public String toString() {
return "TreeNode{" +
"value=" + value +
", leftNode=" + leftNode +
", rightNode=" + rightNode +
'}';
}
}

 

举报

相关推荐

0 条评论