创建/序列化
技巧就在于helper method里preorder只需要纪录一个index,也就是每次循环的root,但是需要记录inorder的begin, end
private TreeNode buildTree(int[] preorder, int pre_index, int[] inorder, int in_start, int in_end)
public class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTree(preorder, 0, inorder, 0, inorder.length - 1);
}
private TreeNode buildTree(int[] preorder, int pre_index, int[] inorder, int in_start, int in_end){
if(pre_index >= preorder.length || in_start > in_end) return null;
int rootVal = preorder[pre_index];
int pos = in_start;
while(pos <= in_end && inorder[pos] != rootVal){
pos++;
}
int leftTreeLength = pos - in_start;
TreeNode root = new TreeNode(rootVal);
root.left = buildTree(preorder, pre_index + 1, inorder, in_start, pos - 1);
root.right = buildTree(preorder, pre_index + leftTreeLength + 1, inorder, pos + 1, in_end);
return root;
}
}2018/09/10
笨方法, 存了prestart, preend, in_start, in_end
private TreeNode buildTree(int[] preorder, int[] inorder, int preBegin, int preEnd, int inBegin, int inEnd)
只需要记录
post_index,in_start,in_end三个变量
Serialize and Deserialize Binary Tree
用 Queue实现bfs
注意deserialize的时候,先poll from queue,然后判断String[] input接下来的两个是否为空,只有在不为空的时候才需要append
Last updated
Was this helpful?