| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 586 人关注过本帖
标题:数据结构中的二叉树的非递归中序遍历怎么实现不了
取消只看楼主 加入收藏
wmb429006
Rank: 1
等 级:新手上路
帖 子:13
专家分:9
注 册:2012-12-1
结帖率:0
收藏
已结贴  问题点数:10 回复次数:4 
数据结构中的二叉树的非递归中序遍历怎么实现不了
数据结构中的二叉树的非递归中序遍历怎么实现不了,求帮助啊!
#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
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
快速回复:数据结构中的二叉树的非递归中序遍历怎么实现不了
数据加载中...
 
   



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

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