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...