当前位置:网站首页>408-二叉树-先序中序后序层次遍历
408-二叉树-先序中序后序层次遍历
2022-08-02 03:32:00 【猫毛已经快要掉光的小猫】
存储结构
可以顺序也可以链式,基本都用链式。
顺序存储主要使用i结点左孩子为2i,右孩子为2i+1.有就存没有就置空。对于存完全二叉树或者满二叉树还可以,存普通树空间利用率太低。
链式存储
typedef struct Node{
ElemType data;
Node * left; //左孩子
Node * right; //右孩子
}BTNode, *BTree;
先序中序后序层次遍历
先序:根左右
中序:左根右
后序:右根左
层次:一层一层遍历
先序中序后序递归代码
void preOrder(BTree root){
if (root != NULL)
return;
visit(root); //不同序三行调换位置即可。
preOrder(root->left);
preOrder(root->right);
}
利用栈和队列实现
//栈先序
void preOrder(BTree root){
Stack<BTree> s;
s.push(root);
while(root != NULL || !s.empty()){
while (tmp != NULL){
tmp = tmp->left;
visit(tmp);
s.push(tmp);
}
root = s.top();
s.pop();
root = root->right;
}
}
//栈中序
void inOrder(BTree root){
Stack<BTree> s;
s.push(root);
while(root != NULL || !s.empty()){
while (tmp != NULL){
tmp = tmp->left;
s.push(tmp);
}
root = s.top();
s.pop();
visit(root);
root = root->right;
}
}
//栈后序,来自leetcode官方。
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> res;
if (root == nullptr) {
return res;
}
stack<TreeNode *> stk;
TreeNode *prev = nullptr;
while (root != nullptr || !stk.empty()) {
while (root != nullptr) {
stk.emplace(root);
root = root->left;
}
root = stk.top();
stk.pop();
if (root->right == nullptr || root->right == prev) {
res.emplace_back(root->val);
prev = root;
root = nullptr;
} else {
stk.emplace(root);
root = root->right;
}
}
return res;
}
};
//层次遍历用队列实现
void levelOrder(BTree root){
Queue<BTree> q;
q.push(root);
while (!q.emtpy()){
BTree tmp = q.pop();
visit(tmp);
if (tmp->left)
q.push(tmp->left);
if (tmp->right)
q.push(tmp->right);
}
}
边栏推荐
- 如何快速搭建属于自己的物联网平台?
- 【Arduino 连接 SD 卡模块实现数据读写】
- USB3.0一致性测试方法
- Host your own website with Vercel
- 引擎开发日志:重构骨骼动画系统
- [Popular Science Post] I2C Communication Protocol Detailed Explanation - Partial Software Analysis and Logic Analyzer Example Analysis
- OneNET Studio与IoT Studio对比分析
- [DS3231 RTC real-time clock module and Arduino interface to build a digital clock]
- [Arduino connected to GP2Y1014AU0F dust sensor]
- 【土壤湿度传感器与 Arduino 测量土壤湿度】
猜你喜欢
随机推荐
NE5532运放加法器
【霍尔效应传感器模块与 Arduino】
Typora使用
MIPI解决方案 ICN6202:MIPI DSI转LVDS转换芯片
【科普贴】SD卡接口协议详解
Website development plan research
TQP3M9009电路设计
【Arduino使用旋转编码器模块】
openmv学习 2022.5.9
path 修补文件命令
idea中创建jsp项目详细步骤
出差电子流应用实战
使用pyqt弹出消息提示框
uniCloud通讯录实战
2020 - AAAI - Image Inpainting论文导读《Learning to Incorporate Structure Knowledge for Image Inpainting》
【科普贴】I2C通讯协议详解——偏软件分析和逻辑分析仪实例分析
[Arduino uses a rotary encoder module]
野火ISO-V2学习
【水位传感器与 Arduino 连接测量水位】
MAC安装Mysql超详细完整教程









