二叉树学习记录

理论基础

二叉树的分类

(1)满二叉树:只有度为0或2的结点,且度为0的节点都在同一层

度:结点下面引出的边的条数

深度k

结点数:2^k-1

(2)完全二叉树:除了最底层没有填满,其他都满了,且最底层的结点都集中在该层的最左边

二叉搜索树

左子树所有结点 < 根节点 <右子树所有节点,左右子树也分别满足

平衡二叉搜索树

左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

遍历方式

前中后:指中间节点的顺序

struct TreeNode {
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

递归遍历

(1)确定递归函数的参数和返回值

(2)确定终止条件

(3)确定单层遍历的逻辑

中序遍历举例

void traversal(TreeNode* cur, vector<int>& vec) {
    if (cur == NULL) return;
    traversal(cur->left, vec);  // 左
    vec.push_back(cur->val);    // 中
    traversal(cur->right, vec); // 右
}

最清晰的遍历视频:使用动画讲解 二叉树递归遍历的代码,数据结构与算法_哔哩哔哩_bilibili

刷题

翻转二叉树:遍历顺序不能是中序,翻转用swap

对称二叉树

二叉树的最大深度

二叉树的层序遍历:逐层,从左到右访问所有节点

自己用队列把过程模拟一遍就会了

二叉树最小深度:当层序遍历,第一次遇到叶子结点的深度

完全二叉树的节点个数:

层序遍历,套模版可以秒了

试试递归遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值