| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 407 人关注过本帖
标题:求助 二叉树非递归先序遍历 老是搞不完整,要么不输出右子树,要么无线循环 ...
只看楼主 加入收藏
b88952603
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:4
专家分:1
注 册:2011-7-25
收藏
 问题点数:0 回复次数:3 
求助 二叉树非递归先序遍历 老是搞不完整,要么不输出右子树,要么无线循环。
我都搞了一个早上了... 看了很多东西。。可自己写出来的  老是有问题。。找了很多 但找不到。。希望各位大大们。。帮我检查一下。。找一下原因。。就是非递归先序有问题。

#include "stdio.h"
#include "malloc.h"

#define MAX 20



typedef struct node
{
    int num;
    struct node *lchild,*rchild;
};

node* btree()                //建立二叉树
{
    node *p;
    int n;
    printf("按先序遍历输入,如果是虚节点,请用0填补:");
    scanf_s("%d",&n);

    if(n != 0)
    {
        p = (node*)malloc(sizeof(node));
        p->num = n;
        p->lchild = btree();
        p->rchild = btree();
    }
    else
        p = NULL;
    return p;
}


void xxbl(node *p)           //先序遍历
{
    if(p != NULL)
    {
        printf("%6d ",p->num);
        xxbl(p->lchild);
        xxbl(p->rchild);
    }
}


void zxbl(node *p)            //中序遍历
{
    if(p != NULL)
    {
        zxbl(p->lchild);
        printf("%6d ",p->num);
        zxbl(p->rchild);
    }
}


void hxbl(node *p)            //后续遍历
{
    if(p != NULL)
    {
        hxbl(p->lchild);
        hxbl(p->rchild);
        printf("%6d ",p->num);
    }
}



void f_xxbl(node *s)                           //非递归先序遍历
{
    node*b[MAX],*p;
    p = s;
    int top = 0;

   
    do{
        while(p != NULL)
        {
            printf("%6d ",p->num);
            top++;
            b[top] = p;
            p = p->lchild;
        }
   
        if(top > 0)
        {
            top--;
            p = b[top];
            p = p->rchild;
        }
    }while(top == 0);
}
int _tmain(int argc, _TCHAR* argv[])
{
    node *root;


    root = btree();          //建立二叉树
   
    printf("先序遍历");
    xxbl(root);                 //先序遍历

    printf("\n中序遍历");
    zxbl(root);              //中序遍历

    printf("\n后序遍历");
    hxbl(root);                 //后续遍历

    printf("\n非递归先序遍历");
    f_xxbl(root);            //非递归遍历
   
    return 0;
}
搜索更多相关主题的帖子: include 二叉树 无线 
2011-07-25 14:29
b88952603
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:4
专家分:1
注 册:2011-7-25
收藏
得分:0 
本想简单的 用一个数组 来放里面的节点的...想通了..但写出来的..就是错误的..想了好半天...希望哪位高手  帮我一下
2011-07-25 15:45
b88952603
Rank: 1
来 自:杭州
等 级:新手上路
帖 子:4
专家分:1
注 册:2011-7-25
收藏
得分:0 
来位大哥帮我一下 好不好
2011-07-26 09:48
黄小虎
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-6-4
收藏
得分:0 
2012-06-08 14:05
快速回复:求助 二叉树非递归先序遍历 老是搞不完整,要么不输出右子树,要么无 ...
数据加载中...
 
   



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

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