数据结构学过,根据前序和中序可以确定唯一一棵二叉树。
解法:理解是比较简单的,前序确定根节点的值,中序找到根节点的位置,根节点的前半部分是左子树,根的后半部分是右子树,再构建左子树,右子树。以此构建二叉树,当然理解起来很简单,代码需要使用递归访问和实现。
例子:,构建树:
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return build(preorder,inorder,0,0,inorder.length-1);
}
public TreeNode build(int[] pre, int[] in,int preStart,int inStart,int inEnd){
if(preStart > pre.length - 1||inStart>inEnd) return null;
TreeNode root = new TreeNode(pre[preStart]);
int index = 0;//记录根节点的位置
for(int i=inStart;i<=inEnd;i++){
if(root.val == in[i]){
index = i;
break;
}
}
root.left = build(pre,in,preStart+1,inStart,index-1);//找出左子树的各个位置
root.right = build(pre,in,preStart+index-inStart+1,index+1,inEnd);//找出右子树的各个位置
return root;
}
}