二叉树遍历及遍历性质
一些性质:
1.前序遍历第一个元素是root,后序遍历最后一个元素是root,中序遍历root的左边元素是左分支,右边元素是右分支;
2.已知前中遍历,或者中后遍历可确定二叉树,前后不行;
3.二叉搜索树中序遍历有序;
4.如果t1是t2的子树,那么t1序列化的结果是t2序列化的子序列;
遍历:
1.递归前序
vector<int> res;
void preorder(Treenode* root){if(root==NULL) return; //这里也可以对res操作,但注意要returnres.push_back(root->val);preorder(root->left); //注意先左后右preorder(root->right);
}
2.递归中序
vector<int> res;
void preorder(Treenode* root){if(root==NULL) return; //这里也可以对res操作,但注意要returnpreorder(root->left); //注意先左后右res.push_back(root->val);preorder(root->right);
}
3.递归后序
vector<int> res;
void preorder(Treenode* root){if(root==NULL) return; //这里也可以对res操作,但注意要returnpreorder(root->left); //注意先左后右preorder(root->right); res.push_back(root->val);
}
4.层序遍历BFS
vector<int> res;
void bfs(Treenode* root){if(root==NULL) return res;deque<Treenode*> q;q.push(root);while(!q.empty()){int s=q.size(); //q的size在for循环中会变,注意刚开始就求Treenode* temp;for(int i=0;i<s;++i){temp=q.front();q.pop();res.push_back(temp);if(temp->left) q.push(temp->left); //注意先左后右if(temp->right) q.push(temp->right); }}
}
5.借助栈
来自leetcode https://leetcode-cn.com/problems/binary-tree-inorder-traversal/solution/dong-hua-yan-shi-94-er-cha-shu-de-zhong-xu-bian-li/
**
应用:
**
1.求树深度
int height(Treenode* root){if(root==NULL) return 0;int left=height(root->left);int right=height(root->right);return max(left,right)+1;
}
或者用BFS每一层加一的方法
2.二叉树很多用递归的,后面再补充吧
二叉树遍历及遍历性质相关推荐
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...
- 二叉树先序遍历,中序遍历,后序遍历,层次遍历学习总结及完整C/C++代码
伪代码阐述 先序遍历 先序遍历:先访问根节点, 然后深入左子树,直到不能深入时再深入右子树 由定义可得递归式 void travPre_R(BinNodePosi* x,VISIT& visi ...
- 由任意二叉树的前序遍历序列和中序遍历序列求二叉树的思想方法_算法与数据结构基础 - 二叉树(Binary Tree)...
二叉树基础 满足这样性质的树称为二叉树:空树或节点最多有两个子树,称为左子树.右子树, 左右子树节点同样最多有两个子树. 二叉树是递归定义的,因而常用递归/DFS的思想处理二叉树相关问题,例如Leet ...
- LeetCode-144:二叉树的前序遍历
题目描述: 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 输入:root = [1,null,2,3] 输出:[1,2,3] 思路分析: 递归或是迭代实现. 递归: 首先我们需要了解什 ...
- 数据结构(二十)二叉树的递归遍历算法
一.二叉树的遍历的定义 1.二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问依次且仅被访问依次.树的结点之间不存在 ...
- 算法学习笔记(六) 二叉树和图遍历—深搜 DFS 与广搜 BFS
图的深搜与广搜 复习下二叉树.图的深搜与广搜. 从图的遍历说起.图的遍历方法有两种:深度优先遍历(Depth First Search), 广度优先遍历(Breadth First Search),其 ...
- 【算法笔记】二叉树之基础遍历
基础知识 一. 二叉树的种类 二叉树主要分为满二叉树.完全二叉树 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树.深度为k的满二叉树,有2k ...
- 32、用队列实现层序遍历-102.二叉树的层序遍历
题目描述: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 . (即逐层地,从左到右访问所有节点). 思路:之前在剑指Offer中做过 使用队列先入先出的性质,实现层序遍历! DFS(深度优 ...
- 二叉树、前序遍历、中序遍历、后序遍历
一.树 在谈二叉树前先谈下树和图的概念 树:不包含回路的连通无向图(树是一种简单的非线性结构) 树有着不包含回路这个特点,所以树就被赋予了很多特性 1.一棵树中任意两个结点有且仅有唯一的一条路径连通 ...
- 刷题记录8---验证二叉搜索树+二叉树的层序遍历+从前序与中序遍历序列构造二叉树+二叉树展开为链表+二叉树的最近公共祖先
前言 所有题目均来自力扣题库中的hot 100,之所以要记录在这里,只是方便后续复习 98.验证二叉搜索树 题目: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树. 有效 二叉搜 ...
最新文章
- shiro处理ajax请求未登录,shiro处理ajax请求session失效跳转
- QT4到QT5的变化!
- Java 高并发_JAVA并发编程与高并发解决方案 JAVA高并发项目实战课程 没有项目经验的朋友不要错过!...
- NYOJ 905 卡片游戏
- 不写程序改当老板 留给IT圈一个销魂的背影
- 在Qt Creator以外编写Qt程序
- Linux——VIM中代码的折叠和打开
- 傅里叶变换的更多性质:相位展开、零相位窗等
- mysql jpa 正则_Spring Data JPA 实例查询
- 阿里取消周报!但普通数据人的周报、月报焦虑,谁来拯救?
- 学校网络安全事故救助机制初探
- php 期望参数1为资源,php – imagesx()期望参数1是资源,给定布尔值
- 实习成长之路:MySQL四:深入浅出索引
- 取消android所有动画,android – 动画取消动画
- Gnutella 及无结构化(非结构化)P2p的一些总结
- opengl 五角星画法 源代码
- js字符串时间格式与中国标准时间格式相互转换
- 域服务器无法修改域账户密码,域用户使用Ctrl+Alt+del不能修改密码
- 统计学之离散指标(全距、内距、异众比率、平均差与标准差)
- 商用密码应用与安全性评估之(四)密码应用安全性评估实施要点
热门文章
- 记一次安装开源kafka_2.12-2.8.0 + SCRAM-SHA-256 认证
- [入门]树(treeview)控件制作导航的做法(三)
- 利用aspose实现ppt,doc,docx,pptx,xlsx,xls,txt,图片类型转pdf以及实现在线预览(可用于window和linux上,无水印)
- 基于MIMICS的口腔模型的配准
- better-scroll + fastclick 轮播图在pc端方案
- 深度学习||写论文思路整理||论文阅读的技巧
- Winform 中panel的mousewheel鼠标滚轮事件触发
- 如何计算数组元素个数?
- Vmware EXSI安装Unbuntu系统
- Python算法练习(五)// 算法:KMeans,数据集:标准普尔500指数