513 找树左下角的值
1.使用层序遍历会较为简洁易懂,记得是用队列辅助树的层序遍历。
2.使用递归核心思想是找深度最深的节点,即叶子节点,遍历时先左后右,深度大于当前节点时才更新。所以同层次的叶子节点只会保留最左边叶子节点的值。
112 路径总和
1.什么时候递归函数有返回值,什么时候递归函数没有返回值
当我们只寻找符合要求的一条路径时,就有返回值,如果我们要遍历所有路径时,就没有返回值。
还有后序遍历需要根据左右递归的返回值推出中间节点的状态,这种需要有返回值
113. 路径总和ii
java中除了基本类型默认引用传递,值会一直被改变,如果要存储中间结果,开辟新空间进行存储。
result.add(new ArrayList<>(path));
2.对节点的回溯操作
path.add(node.val);
if(node.left==null&&node.right==null)
{
if(sum==node.val) result.add(new ArrayList<>(path));
return;
}
if(node.left!=null)
{
traversal(node.left,sum-node.val,result,path);
path.removeLast();
}
if(node.right!=null)
{
traversal(node.right,sum-node.val,result,path);
path.removeLast();
}
106从中序与后序遍历序列构造二叉树
思路:递归,每次找根节点和它的左右孩子节点,同时分割遍历结果,当遍历结果只有一个节点时,即为叶子节点,直接返回对应值的节点。
System.arraycopy(inorder,0,left_in,0,index);
System.arraycopy(inorder,index+1,right_in,0,size-1-index);
System.arraycopy(preorder,1,left_pre,0,index);
System.arraycopy(preorder,index+1,right_pre,0,size-index-1);
root.left=buildTree(left_pre,left_in);
root.right=buildTree(right_pre,right_in);