| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 586 人关注过本帖
标题:数据结构中的二叉树的非递归中序遍历怎么实现不了
只看楼主 加入收藏
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
结帖率:0
收藏
已结贴  问题点数:10 回复次数:7 
数据结构中的二叉树的非递归中序遍历怎么实现不了
数据结构中的二叉树的非递归中序遍历怎么实现不了,求帮助啊!
#include<stdio.h>
#include<stdlib.h>
typedef struct BiNode
{
    char data;
    struct BiNode * lchild;
    struct BiNode * rchild;
}BiTNode,*BiTree;
typedef BiTNode QElemType;/* 设队列元素为二叉树的指针类型 */
typedef BiTNode SElemType;/* 设栈元素为二叉树的指针类型 */
typedef struct Node
{
    SElemType * data;
    struct Node * next;
}LinkStackNode,* LinkStack;
void InitStack(LinkStack &top)
{
    top=(LinkStack)malloc(sizeof(LinkStackNode));
    top->next=NULL;
}
void Push(LinkStack & top,BiTree e)
{
    LinkStack temp;
    temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
    if(temp==NULL)
        exit;
    temp->data=e;
    temp->next=top->next;
    top->next=temp;
}
void Pop(LinkStack &top,BiTree e)
{
    LinkStack temp;
    temp=top->next;
    if(temp==NULL)
         printf("栈为空,请从新选择\n");
    top->next=temp->next;
    e=temp->data;
    free(temp);
}
int GetTop(LinkStack &top,BiTree &e)
{
    LinkStack  temp;
    temp=top->next;
    if(temp==NULL)
         printf("栈为空,请从新选择\n");
    e=temp->data;
    return 1;
}
void InOrderTraverse(BiTree T)/*非递归中序遍历二叉树*/
{
    LinkStack S;
    InitStack(S);
    BiTree p=T;
    Push(S,p);
    while(S->next!=NULL)
    {
        while(GetTop(S,p)&&p)
            Push(S,p->lchild);
        Pop(S,p);
        if(S->next!=NULL)
        {
            Pop(S,p);
            printf("%c",p->data);
            Push(S,p->rchild);
        }
    }
}
搜索更多相关主题的帖子: 结构 include 二叉树 元素 
2012-12-01 23:46
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:10 
为什么实现不了,除了什么错误?希望楼主能够写明白一点啊

不要贴一大堆的代码却没有说明,如果什么问题都是人家帮你跟出来,对你进步不大的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-02 11:44
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
收藏
得分:0 
知道原因了
2012-12-02 11:46
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
收藏
得分:0 
回复 2楼 yuccn
知道原因了 ,不过还是谢谢你啊
2012-12-02 11:47
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
收藏
得分:0 
不过在函数的参数传递时  *    &  的区别和作用不是特别清楚啊
2012-12-02 11:49
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
收藏
得分:0 
修改后可以是这样
#include<stdio.h>
 #include<stdlib.h>
 typedef struct BiNode
 {
     char data;
     struct BiNode * lchild;
     struct BiNode * rchild;
 }BiTNode,*BiTree;
 typedef struct Node
 {
     BiTree data;
     struct Node * next;
 }LinkStackNode,* LinkStack;
 void InitStack(LinkStack top)
 {
     top->next=NULL;
 }
 void Push(LinkStack top,BiTree e)
 {
     LinkStack temp;
     temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
     if(temp==NULL)
         exit;
     temp->data=e;
     temp->next=top->next;
     top->next=temp;
 }
 void Pop(LinkStack top,BiTree &e)
 {
     LinkStack temp;
     temp=top->next;
     if(temp==NULL)
          printf("栈为空,请从新选择\n");
     top->next=temp->next;
     e=temp->data;
     free(temp);
 }
 int GetTop(LinkStack top,BiTree &e)
 {
     LinkStack  temp;
     temp=top->next;
     if(temp==NULL)
          printf("栈为空,请从新选择\n");
     e=temp->data;
     return 1;
 }

 还可以是这样
void InitStack(LinkStackNode &top)
{
    top.next=NULL;
}
void Push(LinkStackNode &top,BiTree e)
{
    LinkStack temp;
    temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
    if(temp==NULL)
        exit;
    temp->data=e;
    temp->next=top.next;
    top.next=temp;
}
void Pop(LinkStackNode &top,BiTree &e)
{
    LinkStack temp;
    temp=top.next;
    if(temp==NULL)
         printf("栈为空,请从新选择\n");
    top.next=temp->next;
    e=temp->data;
    free(temp);
}
int GetTop(LinkStackNode &top,BiTree &e)
{
    LinkStack  temp;
    temp=top.next;
    if(temp==NULL)
         printf("栈为空,请从新选择\n");
    e=temp->data;
    return 1;
}





2012-12-02 12:00
ggx7061131
Rank: 2
等 级:论坛游民
威 望:1
帖 子:21
专家分:12
注 册:2012-7-5
收藏
得分:0 
#include<stdio.h>
 #include<stdlib.h>
 typedef struct BiNode
 {
     char data;
     struct BiNode * lchild;
     struct BiNode * rchild;
 }BiTNode,*BiTree;
 typedef BiTNode QElemType;/* 设队列元素为二叉树的指针类型 */
 typedef BiTNode SElemType;/* 设栈元素为二叉树的指针类型 */
 typedef struct Node
 {
     SElemType * data;
     struct Node * next;
 }LinkStackNode,* LinkStack;
 void InitStack(LinkStack &top)
 {
     top=(LinkStack)malloc(sizeof(LinkStackNode));
     top->next=NULL;
 }
int Push(LinkStack & top,BiTree e)
 {
     LinkStack temp;
     temp=(LinkStackNode*)malloc(sizeof(LinkStackNode));
     if(temp==NULL)return 0;
     else
     {
     temp->data=e;
     temp->next=top->next;
     top->next=temp;
     return 1;
     }
 }
 void Pop(LinkStack &top,BiTree e)
 {
     LinkStack temp;
     temp=top->next;
     if(temp==NULL)
          printf("栈为空,请从新选择\n");
     top->next=temp->next;
     e=temp->data;
     free(temp);
 }
 int GetTop(LinkStack &top,BiTree &e)
 {
     LinkStack  temp;
     temp=top->next;
     if(temp==NULL)
          printf("栈为空,请从新选择\n");
     e=temp->data;
     return 1;
 }
 void InOrderTraverse(BiTree T)/*非递归中序遍历二叉树*/
 {
     LinkStack S;
     InitStack(S);
     BiTree p=T;
     Push(S,p);
     while(S->next!=NULL)
     {
         while(GetTop(S,p)&&p)
             Push(S,p->lchild);
         Pop(S,p);
         if(S->next!=NULL)
         {
             Pop(S,p);
             printf("%c",p->data);
             Push(S,p->rchild);
         }
     }
 }
 void main()
 {}
主函数里面自己写(调用就可以了)
2013-04-01 00:57
张残卷
Rank: 1
来 自:安徽安庆
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-5-17
收藏
得分:0 
好像你的这个程序也不能运行
2013-05-17 22:30
快速回复:数据结构中的二叉树的非递归中序遍历怎么实现不了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018692 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved