二叉树后序遍历的非递归实现->陈越 节点二次入栈实现的变形
来源:互联网 发布:为什么淘宝追评不显示 编辑:程序博客网 时间:2024/05/21 06:29
//陈越 二叉树后序遍历的非递归实现的节点二次入栈实现#include <stdio.h>#include <stdlib.h>struct BinTreeNode{ int Element; int Time;//入栈次数 struct BinTreeNode* Left; struct BinTreeNode* Right;};//以下代码用于建树,便于测试中序遍历程序是否正确struct BinTreeNode* CreateNode(int data){//创造新节点 struct BinTreeNode* temp; temp=(struct BinTreeNode*)malloc(sizeof(struct BinTreeNode)); if(temp!=NULL){ temp->Element=data; temp->Time=0; temp->Left=NULL; temp->Right=NULL; } return temp;}struct BinTreeNode* FindNode(struct BinTreeNode* BinTree,int data)//查找{ if(BinTree==NULL) return NULL; if(BinTree->Element==data) return BinTree; struct BinTreeNode* temp=NULL; if(BinTree->Left!=NULL) temp=FindNode(BinTree->Left,data); if(temp==NULL&&BinTree->Right!=NULL) temp=FindNode(BinTree->Right,data); return temp;}//假设每个节点值不同#define LEFT 1#define RIGHT 0struct BinTreeNode* InsertNode(struct BinTreeNode* BinTree,int loc,int dir,int data)//插入节点,loc代表插入的数的父节点的值,dir表示方向{ struct BinTreeNode* parent=FindNode(BinTree,loc); if(parent!=NULL){ struct BinTreeNode* temp=CreateNode(data); if(dir==LEFT) parent->Left=temp; else parent->Right=temp; } return BinTree;}void PostOrderTrversal(struct BinTreeNode* BinTree){ //建栈 struct BinTreeNode* stack[100]; int top=-1; struct BinTreeNode* Temp=BinTree; while(Temp!=NULL||top>=0){ while(Temp!=NULL){//遍历 (子)树左路径 top++; stack[top]=Temp; stack[top]->Time++; Temp=Temp->Left; } if(top>=0){ if(stack[top]->Time==2){ printf("%d ",stack[top]->Element); top--; } else{ stack[top]->Time++; Temp=stack[top]->Right; } } } return;}int main(){ struct BinTreeNode* BinTree; //先手工创建一个树 //不提倡此类建树方法,只是暂时用于测试程序 BinTree=CreateNode(10); BinTree=InsertNode(BinTree,10,1,20); BinTree=InsertNode(BinTree,10,0,30); BinTree=InsertNode(BinTree,30,1,40); BinTree=InsertNode(BinTree,40,0,50); //遍历 PostOrderTrversal(BinTree); return 0;}
1 0
- 二叉树后序遍历的非递归实现->陈越 节点二次入栈实现的变形
- 二叉树后序遍历的非递归实现
- 非递归实现二叉树的遍历
- 非递归实现二叉树的遍历
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树的非递归遍历实现
- 二叉树遍历的非递归实现
- 非递归实现二叉树的遍历
- 二叉树先序中序后序遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树中序遍历的非递归实现
- 非递归遍历二叉树的实现
- 二叉树遍历的非递归实现
- 二叉树遍历的非递归实现
- 二叉树各种遍历的实现(递归、非递归、层次、高度和节点数目)
- 错误Failure to transfer org.apache.maven.plugins
- 自定义控件---右侧首字母索引列的实现
- [Android 外挂字幕维护Note]一次字幕版本release的心酸过程
- spring加载资源
- maven使用中的一些疑虑
- 二叉树后序遍历的非递归实现->陈越 节点二次入栈实现的变形
- 设计模式之创建者模式
- List,Set,Map集合使用方法总结
- 动态规划-背包问题
- 如何转载别人的博客文
- Linux文件类型与扩展名
- 【git】常用的git命令
- WebView
- 第十周 项目3-利用二叉树遍历思想解决问题