二叉树结构:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
二叉树的遍历顺序:
前序序列:根左右 (递归中常用到)
中序序列:左根右
后序序列:左右根
遍历方式:
深度优先搜索(DFS)、广度优先搜索(BFS)
//DFS
void dfs(TreeNode* node, int deep) {
if (node == NULL) {
return;
}
dfs(node->left , deep + 1);
dfs(node->right, deep + 1);
}
void BFS(TreeNode* root) {
queue<TreeNode *> q;
q.push(root);
int d = 0;
while (q.empty()) {
d++;
for(int i =0,int n = q.size(); i<n; i++){
TreeNode *node = q.front();
q.pop();
printf(d+"层 "+node.value);
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
}
算法相关:
1.计算二叉树深度
原设定,一棵树只有一个节点为1,没有节点为0
而这里的设定,只有一个节点深度设为0
int height(TreeNode* root) {
if (root == NULL)
return 0;
return 1 + max(height(root->left), height(root->right));
思路:
1.树的深度=max(左右子树的深度) +1
2.判断平衡二叉树
平衡二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1
bool isBalanced(TreeNode* root) {
if (root == NULL) {
return true;
}
return isBalanced(root->right)&&isBalanced(root->left)&&abs(height(root->left) - height(root->right)) < 1
/*相当于这种写法,但性能来说是上面的好
bool r =isBalanced(root->right);
bool l =isBalanced(root->left);
return abs(height(root->left) - height(root->right)) < 1 && r && l;*/
}
5.二叉树的最近公共祖先
p,q为树内的两个节点,求最近公共祖先
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q){
if(root == NULL)
return NULL;
if(root == p || root == q)
return root;
TreeNode* left = lowestCommonAncestor(root->left, p, q);
TreeNode* right = lowestCommonAncestor(root->right, p, q);
if(left == NULL)
return right;
if(right == NULL)
return left;
if(left && right) // p和q在两侧
return root;
return NULL; // 必须有返回值
//作者:Wilson79
//链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/solution/c-jing-dian-di-gui-si-lu-fei-chang-hao-li-jie-shi-/
}
这是经典的递归思路:
1.如果当前结点 root 等于 NULL,则返回 NULL
(root==NULL适用于大多数题)
2.如果 root 等于 p 或者 q ,那这棵树一定返回 p 或者 q
3.用 left 和 right 保存左右子树的遍历结果(结果不为空,则为祖先之一)
4.left为空,说明结果在right。反之,同理
5.如果 left 和 right 都非空,说明一边一个,因此 root 是他们的最近公共祖先
6.如果 left 和 right 都为空,则返回空(到尾或者找不到)
1657

被折叠的 条评论
为什么被折叠?



