【LeetCode-二叉樹】二叉樹前序遍歷

題目來源於 LeetCode 上第 144號(Binary Tree Preorder Traversal)問題:二叉樹的前序遍歷。題目難度爲 Medium。node

題目地址: https://leetcode.com/problems/binary-tree-preorder-traversal/面試

題目描述

Given a binary tree, return the preorder traversal of its nodes' values.數組

給定一個二叉樹,返回其節點值的前序遍歷bash

Input: [1,null,2,3]
   1
    \
     2
    /
   3
Output: [1,2,3]
複製代碼

二叉樹的前序遍歷過程: 根節點 -> 左子樹 -> 右子樹,以下圖所示:post

-w400

結果爲: 4 2 1 3 6 5 7ui

題目解析

  1. 循環檢測棧是否爲空,或者根節點是否爲空
  2. 循環檢測左節點,保存到棧中
  3. 當左節點遍歷結束以後,取出棧頂的右節點,再次執行步驟2

代碼實現一(非遞歸)

class Solution {
    
    /**
     * 前序遍歷
     * @param root 根節點
     * @return 前序遍歷的集合
     */
    public List<Integer> preorderTraversal(TreeNode root) {
        Stack<TreeNode> stack = new Stack();
        List<Integer> list = new LinkedList();

        /**
         * 步驟1
         * 循環檢測棧是否爲空,或者根節點是否爲空
         */
        while(!stack.isEmpty() || root!=null){

            /**
             * 步驟2
             * 循環檢測左節點,保存到棧中
             */
            while(root!=null){
                stack.push(root);
                list.add(root.val);
                root = root.left;
            }

            /**
             * 步驟3
             * 取出棧頂的右節點,再次執行步驟2
             */
            if(!stack.isEmpty()){
                root = stack.pop().right;
            }
        }
        return list;
    }

}
複製代碼

代碼實現二(遞歸)

class Solution {
    List<Integer> list = new LinkedList();
    public List<Integer> preorderTraversal(TreeNode root) {
        if (root == null) return list;
        list.add(root.val);
        preorderTraversal(root.left);
        preorderTraversal(root.right);
        return list;
    }
}

複製代碼

相關文章

【LeetCode-數組】查找大多數元素spa

【LeetCode-數組】數組式整數加法3d

【LeetCode-棧】有效的括號code

【LeetCode-鏈表】面試題-反轉鏈表cdn

【LeetCode-二叉樹】二叉樹前序遍歷

相關文章
相關標籤/搜索