数据结构

struct {

int value;

Node* left;

Node* right;

} Node;

 

经典题目

1. 中序遍历

解法:递归

visit(root->left, result);

result.push(root);

visit(root->right, result);

解决2:迭代

while(root != null && stack != null) {

// visit left tree to stack

while(root != null..) {

  stack.push(root);

  root = root->left;

}

// visit central Node

root = stack.pop()

result.push(root)

// visit right Tree

root = root.right

}

 

2. 对称二叉树

首先定义和抽象问题。

满足如下条件,两棵树是对称的。

1). 根节点具有相同的值

2). 每棵树的右子树和另一棵树的左子树对称。

解法1:递归

解法2:迭代

利用队列,分别判断两棵树判断左节点和右节点。

 

3. 二叉树的最大深度

比较简单,递归即可,空时返回。 

 

4. 反转二叉树。

递归。先翻转,再递归;先递归,最后再翻转。两种都可以。

 

5. 二叉树的直径

递归。定义和抽象问题:直径 = 左子树的深度 + 右子树的深度 + 1

 

6. 合并二叉树

递归。深度优先。