C语言 二叉树求思路

2024-12-03 23:50:24
推荐回答(3个)
回答1:

给你写个先序创建二叉树的代码吧:
typedef struct Node{
int data;

struct Node *lchild, * rchild;

}*BiTree;
// 假设你输入的数据最大值不会超过10000,我们用这个来表示你输入完成。。
void createBiTree(BiTree* T)
{
int data;

scanf("%d", &data);

if(data == 10000) (*T) = NULL;

else

{

(*T) = (BiTree)malloc(sizeof(Node));

createBiTree(&(*T)->lchild); //创建左子树

createBiTree(&(*T)->rchild); //创建右子树

}

}
对于这个函数的调用就很简单了:
BiTree T;
createBiTree(&T);
做了这些之后,我想给你点建议,你是不是觉得我们还差点什么呢?对,内存泄露。。。我们动态创建的数据一定要释放,所以,最后你还要写一个freeBiTree(BiTree* T)来释放内存。。
释放内存怎么写?用free函数啊!怎么用?呵呵,用后序遍历二叉树来逐个节点的来释放撒。。这个就不要我写了吧。。。当然如果你嫌那个写起来费事,那我还教你一招撒,你创建一个比较大的静态数组,这个数组定义为这样:BiTree store4free[100];每次在malloc一个节点后,都将此节点的指针放入store4free数组,最后释放的时候就只要去遍历这个数组就可以了。。。

回答2:

不用建立二叉树,因为输入数据就已经是一个二叉树了,所以只要递归求深度即可,
depth(c) = min{depth(lc), depth(rc)} + 1
求的时候用数组把depth(c)存下来,避免重复计算(这方法数据结构课上有教吧,动态规划的一种变形)。
把每个depth(c)都算不出,然后求最大值即可(当然如果知道1是根节点,只要算depth(1))

回答3:

你求什么值