LeetCode 144 二叉樹的前序遍歷

2021-09-13 08:28:15 字數 1418 閱讀 7607

1. 題目

2. 解答

2.1. 遞迴法

定義乙個存放樹中資料的向量 data,從根節點開始,如果節點不為空,那麼

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

vectortemp = {};

if (root != null)

return data; }};

2.2. 迭代法

定義乙個存放樹中節點的棧 node_stack 和存放資料的向量 data,從根節點開始,如果節點不為空或者棧非空,迴圈以下過程:

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution ;

stacknode_stack;

treenode* temp = root;

while (temp || !node_stack.empty())

// 若最後乙個節點沒有右子節點,棧為空

if (!node_stack.empty()) // 棧非空

}return data; }};

2.3. morris 遍曆法

前面兩種方法要麼需要函式棧要麼需要人工棧,其空間複雜度為 $o(n)$,而 morris 遍曆法可以做到在不影響時間複雜度的情況下做到空間複雜度為 $o(1)$。

定義乙個存放資料的向量 data,從根節點開始,如果當前節點非空,迴圈以下過程:

參考資料

LeetCode144 二叉樹的前序遍歷

題目描述 給定乙個二叉樹,返回它的前序遍歷。分析 遞迴演算法與非遞迴演算法。在非遞迴的方法中,使用輔助棧stack,右子樹先入棧左子樹 棧,就是根 左 右的順序。definition for a binary tree node.public class treenode 遞迴演算法 class s...

LeetCode 144 二叉樹的前序遍歷

給定乙個二叉樹,返回它的 前序 遍歷。示例 輸入 1,null,2,3 1 2 3 輸出 1,2,3 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?時間複雜度 o n 每個結點只會遍歷一次 空間複雜度 o n 遞迴實際上是要借助棧 definition for a binary tree no...

LeetCode 144 二叉樹的前序遍歷

給定乙個二叉樹,返回它的 前序 遍歷。示例 輸入 1,null,2,3 1 2 3 輸出 1,2,3 高階 遞迴演算法很簡單,你可以通過迭代演算法完成嗎?時間複雜度 o n 每個結點遍歷一次 空間複雜度 o n 遞迴借助棧 definition for a binary tree node.stru...