树的三遍历
树结点结构
public class TreeNode { public int data;//存放的数据 public TreeNode leftChild;//左叶子结点 public TreeNode rightChild;//右叶子结点 public TreeNode(int data){//构造函数 this.data = data; } }
然后有这么一棵树
然后根据这张图介绍遍历顺序:
前序遍历——头左右
ABC——>ABDFCGI——>ABDFECGHI——>ABDFECGHI
代码部分:
void preOrder1(TreeNode node){ if(node!=NULL) { cout<<node->data<<" "; preOrder1(node->leftChild); preOrder1(node->rightChild); } }
中序遍历——左头右
BAC——>DBFAGCI——>DBEFAGHCI——>DBEFAGHCI
代码部分:
void inOrder1(TreeNode node){ if(node!=NULL) { inOrder1(node->leftChild); cout<<node->data<<" "; inOrder1(node->rightChild); } }
后序遍历-——左右头
BCA——>DFBGICA——>DEFBHGICA——>DEFBHGICA
代码部分:
void postOrder1(TreeNode node){ if(node!=NULL) { postOrder1(node->leftChild); postOrder1(node->rightChild); cout<<node->data<<" "; } }
非递归部分
前序遍历:
void inOrder2(TreeNode node) { stack<TreeNode*> st; TreeNode *p=node; while (!st.empty()||p!=NULL) { while(p)//沿左子树到底,访问并压栈途中结点 { cout<<p->data<<" "; st.push(p); p=p->leftChild; } p=st.top(); //将结点出栈 st.pop(); p=p->rightChild; } }
中序遍历:
void inOrder2(TreeNode node) { stack<TreeNode*> st; TreeNode *p=node; while (!st.empty()||p!=NULL) { while(p)//沿左子树到底,压栈途中结点,不访问 { st.push(p); p=p->leftChild; } p=st.top(); //将结点出栈 cout<<p->data<<" ";//此时访问 st.pop(); p=p->rightChild; } }
最麻烦后序遍历:
void postOrder2(TreeNode node) { stack<TreeNode*> st; TreeNode *p=node; TreeNode *last=NULL;//最近一次访问的结点 while (!st.empty()||p!=NULL) { while(p)//沿左子树到底,压栈途中结点,不访问 { st.push(p); p=p->leftChild; } p=st.top(); //将结点出栈 //如果p没有右孩子或者其右孩子刚刚被访问过,则访问p节点,并从栈中删除 if(p->rightChild == NULL || p->rightChild == last) { cout<<p->data<<" "; st.pop(); last = p;//标记正在访问的结点 p = NULL;//这样接下来可以访问父节点 } else { p=p->rightChild; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具