以二叉链表为存储结构,编写一个算法求二叉树中最大结点的值

作者&投稿:成王爽 (若有异议请与网页底部的电邮联系)
以二叉树链表作为二叉树的存储结构,怎么编写算法计算返回二叉树的高度?~

编写方法如下:
高度其实也叫深度,我通俗点说就是 比如根节点 是第一层,根节点的左右孩子为第二层,然后根节点的左右孩子各自的孩子为第三层.....那么二叉树的高度就是这棵树最大的层数。这么说不知道楼主明白了没有,举例就是:如果只有一个根节点,那么高度就是1,如果有一个根节点再加上根节点的两个孩子,或者其中一个孩子,那么高度就是2;
那根据这样 如果用递归的思想,算法就比较好写了,就是统计一下根节点的左右孩子的高对呗,看哪个的高度更大那二叉树高度就是哪个。
具体代码如下:
#include
#include //头文件就不用说了吧
typedef struct Node{
char data;
struct Node* lchild;
struct Node* rchild;
}Node,*Tree; //二叉树的定义也不用多说吧那个data的数据类型char可以任意换是吧

int max(int m, int n)
{
if (m > n)
return m;
else
return n;
} //这个我想能够看明白 求两个数最大值,为什么要求最大值上面也说了
int TreeHeight(Node *root)
{
if (root == NULL)
return 0; //如果根节点都没有 那高度肯定就是0了 是吧
else
return 1 + max(TreeHeight(root->lchild), TreeHeight(root->rchild));
} //否则递归计算他的左右孩子的高度然后在加上根节点的层数1 对吧
int height(Node *t) //第二个算法(其实和第一个一样)
{
if(t==NULL)
return 0;
else
{
int m=height(t->lchild);
int n=height(t->rchild); //递归计算该节点的左右孩子的高度
return(m>n)?m+1:n+1; //只不过这里没有用到上面求最大值的那个函数,楼主应该学过C
} //吧,这就是个逗号表达式,判断?A:B 判断满足就返回A不满
} //足就返回B 那这句换还是一样就是求m和n的最大值然后加1返 回

Status PostOrderTraverse(BiTree T)
{
//后序遍历二叉链表树的非递归算法
//找到结点最大值
SqStack S;
InitStack(S);
BiTree p = T;
BiTree pre = NULL;//pre指向上次访问的结点
TElemType Maxdata = T->data;//用来储存最大值
while (p || !StackEmpty(S))
{
while (p)
{
Push(S, p);
p = p->lchild;
}
GetTop(S, p);
if (p->rchild == NULL || pre == p->rchild)
{
if (p->data > Maxdata)
Maxdata = p->data;//更新最大值
Pop(S, pre);
p = NULL;//避免下次重新进入p的左子树
}
else
p = p->rchild;//走向p的右子树
}
return OK;
}

  1. 遍历二叉树,求最大值。

#define UNVAILD_VALUE -32768

int getMaxValue(TreeNode *root)

{

if (root == NULL)

return UNVAILD_VALUE;

else 

{

int maxValue = max(getMaxValue(root->left), getMaxValue(root->right));

return root->value >  maxValue ? root->value :  maxValue;

}

}



以二叉链表为存储结构,分别写出求二叉树结点总数及叶子总数的算法...
答:return(num1+num2);} }

以二叉链表为存储结构。分别写出在二叉树中查找值为X的结点及求X所在的...
答:} NodePos;//前序查找,如果返回0,说明树中没有这个数 depth参数为 根结点的层数,由用户定 int PreSeek(BiTree *T, int data, int depth, NodePos *p){ int ret=0;if (T->data == data){ p->Depth = depth;p->pos = T;ret = 1;} else { if (T->lchild)ret += PreSeek...

假设二叉树采用二叉链表存储结构,请编写一个算法,求一棵二叉树中的最...
答:Status PostOrderTraverse(BiTree T){ //后序遍历二叉链表树的非递归算法 //找到结点最大值 SqStack S;InitStack(S);BiTree p = T;BiTree pre = NULL;//pre指向上次访问的结点 TElemType Maxdata = T->data;//用来储存最大值 while (p || !StackEmpty(S)){ while (p){ Push(S, p)...

设一棵二叉树以二叉链表为储存结构,设计一个递归算法将所有结点的左右子...
答:typedef struct node *pointer; // 定义二叉树结点类型 struct node { datatype data; //结点数据 pointer lchild,rchild; //左右孩子结点 };typedef pointer bitree; //定义二叉树类型 /* 先根遍历交换左右子树 *//* 层次遍历序列生成 */ const int maxsize=100;pointer Q[maxsize+1];...

设二叉树以二叉链表为存储结构,编写一个后续遍历二叉树的非递归算法_百...
答:define STACK_INT_SIZE 100 define STACKINCREMENT 10 define OK 1 define ERROR 0 define TRUE 1 define FALSE 0 define OVERFLOW -2 typedef char TElemType;typedef int Status;typedef char SElemType;typedef struct BiTNode { TElemType data;struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;ty...

已知一棵二叉树以二叉链表为存储结构,编写如下程序:对于树中每一个元 ...
答:先前序遍历整个二叉树,找到符合要求的结点,然后后序遍历该结点的整个子树,逐一释放结点。//假设二叉树结构体如下struct binTree{ int data; binTree *lchild; binTree *rchild;}*BiTree;//函数如下BiTree find(BiTree node, int x){ if(node) { if(node->data==x) dele...

用C语言编写:建立一棵以二叉链表结构存储的二叉树,并对其进行遍历。求该...
答:存储结构 typedef struct { int weight;int parent, lchild, rchild;} HTNode ,*HuffmanTree; // 动态分配数组存储huffman树 算法设计 void createHuffmantree(){ ht=(HuffmanTree)malloc(m+1)*sizeof(HTNode);// 动态分配数组存储huffman树,0号单元未用 // m:huffman 树中的结点数(m=2*n-1...

二叉树的操作及其应用:1、以二叉链表作存储结构,试编写前序、中序...
答:{ // 操作结果:构造空二叉树T T=NULL;} void CreateBiTree(BiTree &T){ // 算法6.4:按先序次序输入二叉树中结点的值(可为字符型或整型,在主程中定义),// 构造二叉链表表示的二叉树T。变量Nil表示空(子)树。修改 int number;scanf("%d",&number); // 输入结点的值 if(number==Nil...

以二叉链表作存储结构,试编写求二叉树高度的算法
答:RootFirst(p->right,nLevel+1);//遍历右子树 } } 本回答由提问者推荐 举报| 答案纠错 | 评论 0 0 Soucula 采纳率:84% 擅长: 数据结构及算法 C/C++ VC++ JAVA相关 为您推荐: 完全二叉树 平衡二叉树 利用二叉链表存储树 若二叉树采用二叉链表 二叉树遍历 什么是二叉树 二叉链表存储结构 二...

以二叉链表为存储结构,编写一个算法求二叉树中最大结点的值
答:遍历二叉树,求最大值。define UNVAILD_VALUE -32768 int getMaxValue(TreeNode *root){ if (root == NULL)return UNVAILD_VALUE;else { int maxValue = max(getMaxValue(root->left), getMaxValue(root->right));return root->value > maxValue ? root->value : maxValue;} } ...