从一棵二叉树中查找出所有结点的最大值。

论坛 期权论坛 期权     
271272975   2018-4-28 02:21   10477   2
设计一个算法,从一棵二叉树中查找出所有结点的最大值。
简单算法,不需要完整程序
分享到 :
0 人收藏

2 个回复

倒序浏览
2#
秋天来了仔陈  1级新秀 | 2018-4-30 01:12:50
#include //头文件
#include
#include
typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;//定义结点类型
int max=-100;//把max定义得足够小
BiTree CreateBiTree()//先序递归创建树
{
    int p;BiTree T;
    scanf("%d",&p);//注意每输入两个值的时候用空格各隔开
    if(p==0)
        T=NULL;
    else
    {
        T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间
        T->data=p;
        T->lchild=CreateBiTree();
        T->rchild=CreateBiTree();
    }
    return (T);
}
int Max(BiTree T)//求最大(递归算法)
{
     if(T==NULL)
     return 0;
    if(T!=NULL)
   {
       if(T->data>max)
       max=T->data;
       Max(T->lchild);
       Max(T->rchild);

    }
    return max;
}
void main()//主函数
{
    BiTree Ta;
    Ta=CreateBiTree();
     printf("最大值是:\n");
     printf("%d",Max(Ta));
   }
原理很简单,随便通过一种遍历(我用的是先序),先把根节点的值给max,然后在访问其他节点的时候判断那个值是否更大,如果是就赋值给max,最后就可以找到最大值了。
想了一下,如果用递归的话就不要用到栈了,这样更简单,如果你需要非递归的话可以联系我。你不会创建树可以联系。
3#
wangboailiu  4级常客 | 2018-4-30 01:12:51
额....给你个思想吧,在电脑上面弄程序打起来困难

查找每个结点的左孩子,如果左孩子还有儿子,继续查找其左儿子...直到最后一层,比较左儿子和右儿子的大小,如果左儿子比右儿子大,则不交换位置,否则交换.再用左儿子和其父结点比较,如果父结点比左儿子大,则不交换,否则交换...
这样进行一次后续的遍历,最终把最大的值丢进了根节点!
OK.程序自己编写....
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP