提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 二叉树的分类
  • 二叉树的遍历
    • 1.递归法
    • 2. 迭代法
    • **3. 层序遍历
  • 总结

二叉树的分类

满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。

二叉搜索树:有数值的二叉树,是一个有序树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。

平衡二叉搜索树:又被称为AVL(Adelson-Velsky and Landis)树,它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树的遍历

1.递归法

2. 迭代法

**3. 层序遍历

leetcode102、107题:打印层序(层序的逆序)

class Solutions{public:vector<vector<int>> levelOrder(TreeNode*root){vector<vector<int>> result;//存储结果queue<TreeNode*> que;if(root != NULL) que.push(root);while(!que.empty()){int size = que.size();vector<int> vec;for(int i=0;i<size;i++){TreeNode*node = que.front();vec.push_back(node->val);que.pop();if(node->left) que.push(node->left);if(node->right) que.push(node->right);}result.push_back(vec);}//reverse(result.begin(),result.end()); //107题return result;}
};

leetcode199题:右视图

class Solution{public:vector<int> rightSideView(TreeNode* root){vector<int> result;//存储结果queue<TreeNode*> que;if(root != NULL) que.push(root);while(!que.empty()){int size = que.size();for(int i=0;i<size;i++){TreeNode*node = que.front();if(i == size-1) result.push_back(node->val);//打印每一行末尾索引的元素que.pop();if(node->left) que.push(node->left);if(node->right) que.push(node->right);}}return result;}
};

leetcode637题:返回每一层均值

class Solution{public:vector<int> rightSideView(TreeNode* root){vector<double> result;//存储结果queue<TreeNode*> que;if(root != NULL) que.push(root);while(!que.empty()){int size = que.size();double sum = 0;for(int i=0;i<size;i++){TreeNode *node = que.front();sum += node->val;//打印每一行末尾索引的元素que.pop();if(node->left) que.push(node->left);if(node->right) que.push(node->right);}result.push_back(sum/size);}return result;}
};

leetcode429题:返回每一层所有包括children

class Solution{public:vector<vector<int>> levelOrder(Node* root){vector<vector<int>> result;//存储结果queue<Node*> que;if(root != NULL) que.push(root);while(!que.empty()){int size = que.size();vector<int> vec;for(int i=0;i<size;i++){Node *node = que.front();vec.push_back(node->val);que.pop();for(int i = 0;i<node->children.size();i++){if(node->children[i]) que.push(node->children[i]);}}     result.push_back(vec);}return result;}
};

leetcode515题:返回每一层的max

class Solution {public:vector<int> largestValues(TreeNode* root) {vector<int> result;queue<TreeNode*> que;if (root != NULL) que.push(root);while(!que.empty()){int size = que.size();vector<int> vec;int max_val = INT_MIN;for(int i= 0;i<size;i++){TreeNode*node = que.front();vec.push_back(node->val);que.pop();max_val = node->val>max_val ? node->val :max_val;if(node->right) que.push(node->right);if(node->left)  que.push(node->left);}result.push_back(max_val);}return result;}
};

leetcode116(117完全一样)题:返回每一层的最右

class Solution {public:Node* connect(Node* root) {queue<Node*> que;if(root!=NULL) que.push(root);while(!que.empty()){int size = que.size();for(int i = 0;i<size;i++){Node *cur = que.front();que.pop();if(i==size-1) cur->next = NULL;else cur->next = que.front();if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);         }}
return root;

leetcode104 题:返回最大深度(就是层数)

class Solution {public:Node* connect(Node* root) {queue<Node*> que;if(root!=NULL) que.push(root);while(!que.empty()){int size = que.size();for(int i = 0;i<size;i++){Node *cur = que.front();que.pop();if(i==size-1) cur->next = NULL;else cur->next = que.front();if(cur->left) que.push(cur->left);if(cur->right) que.push(cur->right);         }}
return root;

总结

总的来说就是套模板,把102题的最基础的层序模板记住,其余稍加改动即可。
参考:代码随想录https://programmercarl.com/0101.%E5%AF%B9%E7%A7%B0%E4%BA%8C%E5%8F%89%E6%A0%91.html

C++二叉树层序遍历相关推荐

  1. 二叉树层序遍历_求二叉树的层序遍历

    题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...

  2. 牛客-二叉树层序遍历

    牛客-二叉树层序遍历 #include <stdio.h> #include <queue> #include <stack> #include <math. ...

  3. 【LeetCode】专题一 二叉树层序遍历

    二叉树层序遍历 在本文中,我将会选取LeetCode上二叉树层序遍历的多道例题,并给出解答,通过多道题我们就可以发现,二叉树的层序遍历并不复杂,并且有着共通点. 102. 二叉树的层序遍历 给你二叉树 ...

  4. 数据结构:二叉树层序遍历和判断是否为完全二叉树

    层序遍历 从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程. while(队列!=NULL) ...

  5. 二叉树层序遍历分层[递归迭代两种思想+三种解法]

    层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...

  6. 102 二叉树层序遍历

    层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组 BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列. 层序遍历相对于BFS, ...

  7. 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)

    二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...

  8. BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历

    目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节 ...

  9. 二叉树层序遍历——java

    目录 一.题目 二.层序遍历顺序 三.思路(迭代法) 四.代码实现 一.题目 1.链接:力扣 2.内容:给你二叉树的根节点 root ,返回其节点值的 层序遍历 . (即逐层地,从左到右访问所有节点) ...

最新文章

  1. curl取跳转地址 php_用PHP如何实现解析抖音无水印视频
  2. 计算机不会输入函数怎么办,函数不正确_电脑上文件打不开,显示函数不正确怎么解决?...
  3. ngrok布置外网访问环境
  4. [转]Cuda笔记【1】GPU计算DEMO
  5. Ajax请求中async属性
  6. redis增加auth
  7. asp.net电子影像相册_大连孕妈看过来 | 290元=孕中期四维排畸+孕妇写真+胎宝电子影集...
  8. 关于SVN状态图标不显示的解决办法
  9. Java实现极光推送
  10. 抢走Salesforce大客户,国产CRM靠的不是运气
  11. 新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流
  12. linux curl证书错误,关于curl:使用Wget忽略SSL证书错误
  13. ChucK初步(1)
  14. html+css+js按键定位搜索框
  15. 程序员代码中的希腊字母表示
  16. 8月英语——知耻而后勇
  17. mysql五日均线_mysql – 如何在SQL中的某个日期范围内执行移动平均线?
  18. github 修改密码密码_雇主要求提供GitHub密码。 如何处理呢?
  19. Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘
  20. 更新 macOS Ventura ssh堡垒机报错:no matching host key type found. Their offer: ssh-rsa,ssh-dss

热门文章

  1. openssl-heartbleed漏洞学习
  2. 用多协议换采集器制作家用负氧离子除醛设备(带空气检测传感器)
  3. MT【319】分段递推数列
  4. opencv进行图像转视频(附带注释哦)
  5. 【原创】关于IE地址栏历史记录的清除
  6. 某程序员曝光美团面试骗局
  7. 摄影-模特引导、直方图、色调曲线、分离色调、相机校准、HSL、渐变滤镜、径向滤镜、画笔
  8. 越过第一道门槛儿:选教材
  9. 挑选几款开源的、优秀的H.265网页播放器,进行特征整理及使用评价
  10. 《数据清洗》8.3.3 加载时间数据至时间维度表