C++二叉树层序遍历
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 二叉树的分类
- 二叉树的遍历
- 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++二叉树层序遍历相关推荐
- 二叉树层序遍历_求二叉树的层序遍历
题目描述 给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7}, 该二叉树层序遍历的结果是 [ [3], [9,20], ...
- 牛客-二叉树层序遍历
牛客-二叉树层序遍历 #include <stdio.h> #include <queue> #include <stack> #include <math. ...
- 【LeetCode】专题一 二叉树层序遍历
二叉树层序遍历 在本文中,我将会选取LeetCode上二叉树层序遍历的多道例题,并给出解答,通过多道题我们就可以发现,二叉树的层序遍历并不复杂,并且有着共通点. 102. 二叉树的层序遍历 给你二叉树 ...
- 数据结构:二叉树层序遍历和判断是否为完全二叉树
层序遍历 从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第二层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的节点的过程. while(队列!=NULL) ...
- 二叉树层序遍历分层[递归迭代两种思想+三种解法]
层序遍历分层的递归迭代解法 前言 一.二叉树层序遍历分层 二.递归与迭代 总结 参考文献 前言 层序遍历作为二叉树遍历的基本遍历,一般来说只能用迭代来解.但是分层输出则既可用迭代,又可配合level用 ...
- 102 二叉树层序遍历
层序遍历,每次层的输出是是一个一维数组,整个二叉树的输出结果是二维数组 BFS遍历,依托于队列结构,每次在根节点出栈的时候,将其值加在结果列表中,然后将他的左右孩子节点入队列. 层序遍历相对于BFS, ...
- 二叉树层序遍历(广度优先搜索)基础概念与经典题目(Leetcode题解-Python语言)
二叉树的广度优先搜索即从上到下.从左到右地进行搜索,对于层序遍历(Level Order)问题,即依次遍历第一层节点.第二层节点-等,基本可以秒杀. 广度优先搜索是通过队列来实现的,python中优先 ...
- BFS(二)二叉树层序遍历(I、II)、二叉树锯齿形层序遍历、N叉树层序遍历
目录 102. 二叉树的层序遍历 107. 二叉树的层序遍历 II 103. 二叉树的锯齿形层序遍历 429. N 叉树的层序遍历 102. 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节 ...
- 二叉树层序遍历——java
目录 一.题目 二.层序遍历顺序 三.思路(迭代法) 四.代码实现 一.题目 1.链接:力扣 2.内容:给你二叉树的根节点 root ,返回其节点值的 层序遍历 . (即逐层地,从左到右访问所有节点) ...
最新文章
- curl取跳转地址 php_用PHP如何实现解析抖音无水印视频
- 计算机不会输入函数怎么办,函数不正确_电脑上文件打不开,显示函数不正确怎么解决?...
- ngrok布置外网访问环境
- [转]Cuda笔记【1】GPU计算DEMO
- Ajax请求中async属性
- redis增加auth
- asp.net电子影像相册_大连孕妈看过来 | 290元=孕中期四维排畸+孕妇写真+胎宝电子影集...
- 关于SVN状态图标不显示的解决办法
- Java实现极光推送
- 抢走Salesforce大客户,国产CRM靠的不是运气
- 新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流
- linux curl证书错误,关于curl:使用Wget忽略SSL证书错误
- ChucK初步(1)
- html+css+js按键定位搜索框
- 程序员代码中的希腊字母表示
- 8月英语——知耻而后勇
- mysql五日均线_mysql – 如何在SQL中的某个日期范围内执行移动平均线?
- github 修改密码密码_雇主要求提供GitHub密码。 如何处理呢?
- Server returns invalid timezone. Go to ‘Advanced‘ tab and set ‘serverTimezon‘
- 更新 macOS Ventura ssh堡垒机报错:no matching host key type found. Their offer: ssh-rsa,ssh-dss