天天看點

二叉樹的前序周遊(兩種方法)1.周遊的思想(根左右)2.彙總的思想(先逐個周遊左子樹,然後周遊右子樹,最後在進行彙總)

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