https://labuladong.online/algo/data-structure-basic/binary-tree-traverse-basic/
今天是學習的第 20 天,主要學習了二叉樹的遞歸遍歷(DFS):
二叉樹有兩種遍歷形式:
遞歸遍歷的程式碼模板:
// 基本的二叉樹節點
class TreeNode {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
// 二叉樹的遞歸遍歷框架
var traverse = function(root) {
if (root === null) {
return;
}
traverse(root.left);
traverse(root.right);
}
traverse
函式就像一個在二叉樹結構上遊走的指針。
遍歷順序:
在 traverse
函式中不同位置寫程式碼,效果是不一樣的。
所謂的前中後序遍歷,指的是在二元樹遍歷框架的不同位置寫程式碼:
// 二叉樹的遍歷框架
var traverse = function(root) {
if (root === null) {
return;
}
// 前序位置
traverse(root.left);
// 中序位置
traverse(root.right);
// 後序位置
};
// 建立一棵滿二叉樹(高度為 3)
// 1
// / \
// 2 3
// / \ / \
// 4 5 6 7
const root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.right = new TreeNode(5);
root.right.left = new TreeNode(6);
root.right.right = new TreeNode(7);
traverse(root);
// 前序位置執行順序:1 -> 2 -> 4 -> 5 -> 3 -> 6 -> 7
// 中序位置執行順序:4 -> 2 -> 5 -> 1 -> 6 -> 3 -> 7
// 後序位置執行順序:4 -> 5 -> 2 -> 6 -> 7 -> 3 -> 1
遍歷方式 | 執行時機 |
---|---|
前序遍歷 | 剛進入節點時 |
中序遍歷 | 左子樹遍歷完成後 |
後序遍歷 | 左右子樹都遍歷完成後 |