跳至主要内容

Binary Tree

每個節點最多有兩個子節點(left、right)的樹結構。

struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};

走訪(Traversal)

  • Preorder(前序):root → left → right
  • Inorder(中序):left → root → right(BST 中序走訪得到遞增序列)
  • Postorder(後序):left → right → root
  • Level order(層序):一層一層由上而下,用 queue(BFS)實作

前三者可用遞迴或 stack(DFS)實作,時間複雜度皆為 O(n)。

Invert binary tree(反轉樹)

把每個節點的左右子樹交換,成為鏡像樹。

struct TreeNode *invert(struct TreeNode *root) {
if (!root)
return NULL;
struct TreeNode *tmp = root->left;
root->left = invert(root->right);
root->right = invert(tmp);
return root;
}
  • 時間複雜度 O(n),空間複雜度 O(h)(遞迴深度,h 為樹高)。
  • 亦可用 BFS/DFS 迭代版本,逐一交換左右子節點。