The Fourth Dimension Space

枯叶北风寒,忽然年以残,念往昔,语默心酸。二十光阴无一物,韶光贱,寐难安; 不畏形影单,道途阻且慢,哪曲折,如渡飞湍。斩浪劈波酬壮志,同把酒,共言欢! -如梦令

数据结构作业之二叉树左右子树交换+二叉树高度计算(写的不好还请大家多多指点)

//数据结构作业之二叉树左右子树交换+二叉树高度计算
//学生:abilitytao 指导老师:Mr ZHANGHONG
//时间:2009年3月17日17:54:33
#include<iostream>
using namespace std;

struct node{
    
int data;
    node 
*lchild;
    node 
*rchild;
}
;

void preorder(node *p)
{

    
if(p!=NULL)
    
{
        
        cout
<<p->data;
        preorder(p
->lchild);
        preorder(p
->rchild);
    }

}

void inorder(node *p)
{
    
if(p==NULL)
        
return ;
    inorder(p
->lchild);
    cout
<<p->data;
    inorder(p
->rchild);
    
}

void CreatTree(node *&p)
{

    
int temp;
    cin
>>temp;
    
if(temp==0)
    
{
        p
=NULL;
        
return;
    }


    p
=new node;
    p
->data=temp;
    CreatTree(p
->lchild);
    CreatTree(p
->rchild);
}

void change(node *p)
{

    
if(p==NULL)
        
return;
    node 
*temp;
    temp
=p->lchild;
    p
->lchild=p->rchild;
    p
->rchild=temp;
    change(p
->lchild);
    change(p
->rchild);
}


int count(node *p)//用递归的方法计算树高
{
    
if(p==NULL)
        
return 0;
    
int lhigh=count(p->lchild);
    
int rhigh=count(p->rchild);
    
if(lhigh>=rhigh)
        
return lhigh+1;
    
else
        
return rhigh+1;
}
//问:可以用全局变量计算树高么?

/*int count(node *p)
{
if(p==NULL)
return 0;
else if(count(p->lchild)>=count(p->rchild))
return count(p->lchild)+1;
else count(p->rchild)+1;
}
*/
//错误版树高计算程序 问:到底哪错了???个人感觉是递归上出问题了。。。



///////////////////////////以下为测试/////////////////////////////
int main ()
{

    node 
*tree;
    CreatTree(tree);
    cout
<<"此二叉树的高度为:"<<count(tree)<<endl;
system(
"pause");
return 0;
}

//////////////////////////////////////////////////////////////////////////

posted on 2009-03-17 18:08 abilitytao 阅读(2851) 评论(4)  编辑 收藏 引用

评论

# re: 数据结构作业之二叉树左右子树交换+二叉树高度计算(写的不好还请大家多多指点)[未登录] 2009-03-20 09:38 清水湾

/*int count(node *p)
{
if(p==NULL)
return 0;
else if(count(p->lchild)>=count(p->rchild))
return count(p->lchild)+1;
else count(p->rchild)+1;
}*///错误版树高计算程序 问:到底哪错了???个人感觉是递归上出问题了。。。


很明显嘛,错在count(p->lchild)>=count(p->rchild) 根本就没你在求左子树的时候还得用同层次右子树的信息,当然不对了。。只能用下一层的信息。。  回复  更多评论   

# re: 数据结构作业之二叉树左右子树交换+二叉树高度计算(写的不好还请大家多多指点)[未登录] 2009-03-20 11:48 abilitytao

@清水湾
有道理呵 看来直观的去理解还是会出问题的   回复  更多评论   

# re: 数据结构作业之二叉树左右子树交换+二叉树高度计算(写的不好还请大家多多指点) 2009-11-27 17:02 杨舟

太感谢你了~~我比较笨,这程序写了一个多小时了,CreatTree的参数老出错,我郁闷啊,看了你后面的 *&p 我恍然大悟啊~~但我还是有点不明白为什么不能用 *p ? chage函数的参数都是用的 *p 啊  回复  更多评论   

# re: 数据结构作业之二叉树左右子树交换+二叉树高度计算(写的不好还请大家多多指点) 2011-10-13 15:17 wqfeng

/*int count(node *p)
{
if(p==NULL)
return 0;
else if(count(p->lchild)>=count(p->rchild))
return count(p->lchild)+1;
else count(p->rchild)+1;
}*///错误版树高计算程序 问:到底哪错了???个人感觉是递归上出问题了。。。
最后的else 少了个return吧  回复  更多评论   


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理