数据结构
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. 合并二叉树
递归。深度优先。