二叉树的前序遍历(两种方法)
程序员文章站
2022-05-20 21:31:46
...
1.遍历的思想(根左右)
注意:1.每次都要进行将链表清空;
2.记录的位置需要放在后面)
class Solution {
List<Integer> list=new ArrayList<>();
private void preorder(TreeNode root){
if(root!=null){
list.add(root.val);
preorder(root.left);
preorder(root.right);
}
}
public List<Integer> preorderTraversal(TreeNode root) {
list.clear();//清空
preorder(root);
return list;
}
}
2.汇总的思想(先逐个遍历左子树,然后遍历右子树,最后在进行汇总)
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
if(root==null)
{
return new ArrayList<>();//当root为空时,返回一个空链表
}
List<Integer> left=preorderTraversal(root.left);//求出所有左子树节点
List<Integer> right=preorderTraversal(root.right);//求出右子树结点
List<Integer> list=new ArrayList<>();
list.add(root.val);
list.addAll(left);//将链表节点全部进行尾插到新链表中
list.addAll(right);
return list;
}
}
上一篇: 自定义队列的例子
下一篇: 最优加工顺序问题--贝尔曼规+回溯