二叉树的中序非递归遍历思想

#include<stdio.h>

#include<stdlib.h>

#define OK 1

#define  ERROR 0

typedef struct node

{

int data;

struct node *lchild;

struct node *rchild;

} Node,Tree;

/*

www.quzhuanpan.com

解释全来自去转盘网,转载请告知

*/

typedef Node *ElemType;

typedef Tree *AnoElemType;

void creatBITree(AnoElemType &T,int array[],int n,int i)//i应该从零开始

{

if(array[0]==‘0‘||i>n) T=NULL;

else

{

if(!(T=(ElemType)malloc(sizeof(node))))

{

exit(0);

}

T->data=array[i];

creatBITree(T->lchild,array,n,i*2+1);

creatBITree(T->rchild,array,n,i*2+2);

}

}

void InOrderTraverse(AnoElemType &T)

{

AnoElemType  p;

ElemType data[100];

int top=0;

p=T;

while(p||top!=0)

{

while(p!=NULL)

{

data[top++]=p;

p=p->lchild ;

}

p=data[--top];

printf("%d ",p->data );

p=p->rchild ;

}

}

int main(void)

{

AnoElemType T;

int array[1000], n,i;

scanf("%d",&n);

for(i=0; i<n; i++)

{

scanf("%d",&array[i]);

}

creatBITree(T,array,n-1,0);

InOrderTraverse(T);

return 0;

}

时间: 2024-12-23 21:30:54

二叉树的中序非递归遍历思想的相关文章

二叉树中序非递归遍历

package com.basic.bt; import java.util.ArrayList; import java.util.Stack; /** * Created by mac on 2017/1/19. */ public class InOrderBT { ArrayList<Integer> result = new ArrayList<Integer>(); ArrayList<Integer> traversal = new ArrayList&l

二叉树的先序非递归遍历(注释版)

/* No recusive to realize the travle of tree */ void NoPreOrder( BiTree root ) {/*{{{*/ Stack S; BiTree P; P = root; S = CreateStack(); while( P!=NULL || !IsEmpty(S) )//判断条件分别对应着 //1,S is not empty && P = NULL 当前节点为上一节点的右子树,右子树为空,但还有上一节点的上一节点的右子树

【算法导论】二叉树的前中后序非递归遍历实现

二叉树的递归遍历实现起来比较简单,而且代码简洁:而非递归遍历则不那么简单,我们需要利用另一种数据结构---栈来实现.二叉树的遍历又可以分为前序.中序和后序三种,它们是按照根结点在遍历时的位置划分的,前序遍历则根结点先被遍历,中序则根结点在左右叶子节点之间被遍历,后序则是根结点最后被遍历.三种非递归遍历中,前序和中序都不是太复制,而后序遍历则相对较难. 一.前序遍历 我们这里前序遍历按照"根-左-右"的顺序来遍历.这里按照"递归--非递归"的次序来研究,之后的几种亦是

二叉树的三种非递归遍历方式

1.先序遍历 1 void PreorderTraversal(BinTree BT) 2 { 3 BinTree T; 4 std::stack<BinTree> BtStack; 5 T = BT; 6 while (T || !BtStack.empty()) 7 { 8 while (T) 9 { 10 BtStack.push(T); 11 printf("%c ", T->Data); 12 T = T->Left; 13 } 14 T = BtSt

二叉树后序非递归遍历

package com.basic.bt; import java.util.ArrayList; import java.util.Stack; /** * Created by mac on 2017/1/19. */ public class PostOrderBT { ArrayList<Integer> result = new ArrayList<Integer>(); public void postorder(TreeNode root) { if(root ==

二叉搜索树的先序中序后序非递归遍历代码

#include<iostream>#include<stack>#include<vector>using namespace std;struct node{  int val;  node *left,*right;  node(int _val):val(_val),left(NULL),right(NULL){     } };struct bignode{ bool isfirst;  node* pnode; };void postorder(node*

数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历

数据结构二叉树-- 编写函数实现:建立二叉树.中序递归遍历.借助栈实现中序非递归遍历.借助队列实现层次遍历.求高度.结点数.叶子数及交换左右子树. ("."表示空子树) #include<stdio.h> #include<stdlib.h> //***********二叉树链表节点结构 typedef char DataType; typedef struct Node {  DataType data;  struct Node*LChild;  struc

二叉树递归与非递归遍历,最近公共父节点算法

#include <iostream> #include <stack> using namespace std; #define MAX 100 //字符串最大长度 typedef struct Node //二叉树结点 { char data; Node *lchild,*rchild; } *Btree; void createBT(Btree &t); //先序构造二叉树 void preorder(Btree &t); //二叉树递归先序遍历 void i

Java实现二叉树的创建、递归/非递归遍历

近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6.二叉树的递归后序遍历 7.二叉树的非递归后序遍历 8.二叉树的层次遍历 这里感谢博客http://blog.csdn.net/skylinesky/article/details/6611442的指导 /**二叉树的结点定义*/ class Node<T>{ private T value; pr