算法训练营第17天|513找树左下角的值 路径总和 从中序与后序遍历序列构造二叉树

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);

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值