1. 程式人生 > >二叉樹最長路徑

二叉樹最長路徑

(二叉樹查詢最長路徑)

建立一棵樹,輸出最長路徑,如果有多條輸出最左端的路

下面是程式碼段:
#include<stdio.h>
#include<malloc.h>
#define null 0

struct Btree{
char data;
Btree *lchild;
Btree *rchild;
};

Btree *setup()//建立二叉樹
{
char ch;
Btree *bt;
printf(“please input ch:”);
ch=getchar();
getchar();
if(ch!=’.’)
{
bt=(Btree *)malloc(sizeof(Btree));
bt->data=ch;
bt->lchild=setup();
bt->rchild=setup();
}
else
return null;
}

int Find(Btree *root)//為二叉樹的節點賦層號
{
if(!root->lchild&&!root->rchild)
{
return 0;
}
else if(root->lchild)
return Find(root->lchild)+1;
else if(root->rchild)
return Find(root->rchild)+1;
else
{
if(Find(root->lchild)>Find(root->rchild))
return Find(root->lchild)+1;
else
return Find(root->rchild)+1;
}
}

void Print(Btree *root)//輸出最長路徑
{
if(root->lchild&&root->rchild)
{
printf("%c\t",root->data);
if(Find(root->lchild)>=Find(root->rchild))
Print(root->lchild);
else
Print(root->rchild);
}
else if(root->lchild)
{
printf("%c\t",root->data);
Print(root->lchild);
}
else if(root->rchild)
{
printf("%c\t",root->data);
Print(root->rchild);
}
else
printf("%c\t",root->data);
}

int main()
{
Btree *b1;
b1=setup();
Print(b1);
return 0;
}