| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 598 人关注过本帖
标题:二叉树的建立与遍历
只看楼主 加入收藏
比卡丘
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-7-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
二叉树的建立与遍历
请问各位高手二叉树的后序遍历
void postOrder(Ptree t)  
{if(t)
 {postOrder(t->lchild);
 postOrder(t->rchild);  
 printf("%c",t->data);  
 }
}
运行到postOrder(t->lchild);时先输出最下面的左孩子2,然后接着该执行下一条语句postOrder(t->rchild);
可是这棵树的t=5,5的右孩子是3,该输出3了呀,而且printf是什么时候输出,左孩子、右孩子、输出这三条语句的执行
顺序是什么啊
请各位大侠指导   
                 5
          4            3
     6        7
  2    1
还有如何建立一颗二叉树
 

搜索更多相关主题的帖子: 如何 二叉树 而且 
2011-07-06 14:54
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:20 
不是这样的  递归肯定是先访问完本层的

给你写了个简单的类  前序创建树  后续递归遍历树
程序代码:
#include <iostream.h>
#include <stdio.h>

#ifndef TREE_H
#define TREE_H 

typedef struct Tree_Node//树节点的结构体
{
    int data;
    Tree_Node * left_child;
    Tree_Node * right_child;
}Tree_Node, *pTree_Node;

class Tree//二叉树类
{
private:
    Tree_Node * tree_head;
public:
    Tree();
    ~Tree();
    bool CreateTree(pTree_Node & head);//创建一个二叉树
public:
    bool TreeDisplay(Tree_Node * root, int  (*pfun)(int));//历遍二叉树
    bool SetTreeRoot(Tree_Node * tree_root);//创建完成后对根节点指针赋值
};

#endif
Tree::Tree()
{
    this->tree_head = NULL;
}

Tree::~Tree()
{
   
}

bool Tree::CreateTree(pTree_Node &root)
{
    int read_temp = 0;
    if(EOF==scanf("%d",&read_temp))
        return false;

    if(0 == read_temp)
        root = NULL;
    else
    {
        root = new  Tree_Node;
        root->left_child = root->right_child = NULL;
        root->data = read_temp;

        CreateTree(root->left_child);//创建左子树
        CreateTree(root->right_child);//创建右子树
    }
    return true;
}

bool Tree::TreeDisplay(Tree_Node * root, int  (*pfun)(int))
{
    if(root)
    {       
        if(TreeDisplay(root->left_child,pfun))
            if(TreeDisplay(root->right_child,pfun))
                if(pfun(root->data))
                    return true;
        return false;
    }
    else
        return true;
}
bool Tree::SetTreeRoot(Tree_Node * tree_root)
{
    this->tree_head = tree_root;
    return false;
}

int  Display(int n)//传递给历遍函数的函数指针
{
    cout<<n<<" ";
    return 1;
}

int main(int argc, char* argv[])
{
    Tree_Node * root = NULL;
    Tree t;

    if(!t.CreateTree(root))//创建二叉树 传递一个指针的引用
        return -1;

    t.SetTreeRoot(root);//设置类里面的根节点的指针

    t.TreeDisplay(root,Display);//简单递归先序历遍二叉树的所有节点

    cout<<endl;
    return 0;
}
/*
测试数据
输入
1 2 3 0 0 4 5 0 6 0 0 7 0 0 0
EOF
输出
3 6 5 7 4 2 1
*/

 

                                         
===========深入<----------------->浅出============
2011-07-06 15:23
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

                                         
===========深入<----------------->浅出============
2011-07-06 15:25
比卡丘
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-7-6
收藏
得分:0 
回复 3楼 laoyang103
麻烦你能不能写个C的啊,我的C++不太懂
2011-07-06 16:36
比卡丘
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-7-6
收藏
得分:0 
回复 楼主 比卡丘
谢谢啦,
2011-07-06 16:56
比卡丘
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-7-6
收藏
得分:0 
回复 2楼 laoyang103
谢谢啦
2011-07-06 16:58
快速回复:二叉树的建立与遍历
数据加载中...
 
   



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

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