關於遞迴演算法求二叉樹深度演算法,關於求二叉樹深度的遞迴演算法

時間 2021-08-30 10:21:18

1樓:匿名使用者

int height(bitree t)

if 中的n應該是v。

其思想是,一個節點的深度是他的兩個子節點中深度的最大值再加上1。這個演算法中u得到其左子數的深度,v獲得右子樹的深度。則這個節點的深度就是u和v中最大的再加上1。

要想獲得樹的深度,就先獲得這個樹中根節點的兩個兒子的深度,比較兩個兒子的深度,取其中最大值在加上1最終獲得樹的深度。根節點的兩個兒子的深度就通過這個上面的原則遞迴求得。

2樓:匿名使用者

u,v 分別求出當前節點左子樹和右子樹的深度(高度),然後當前節點的 深度就等於左右子樹裡面較大的那個+1.

if (u>n) return (u+1)return (v+1)

這句就是返回較深的+1.

u=height(t->lchild);

v=height(t->rchild);

這兩句就是遞迴的呼叫,求深度了。

if (t==null) return 0;

這個就是終止條件了,如果沒有子節點就返回。

關於求二叉樹深度的遞迴演算法

3樓:

關於遞迴,你可以看成是一句一句往下執行嘛。需要儲存狀態的時候,系統就會自動用棧幫你儲存。就依你說得那個為例:

n為全域性變數,初值為0;

第一次呼叫height(t),假設t!=null

由於t!=null:跳過if (t==null) return 0;

關鍵到了u=height(t->lchild); 呼叫本身的函式:此時的t->lchild儲存在棧中,既然是呼叫就得從函式開頭執行:

看下這時候t2(其實就是t->lchild),if (t==null) return 0;

這裡假設t不是null,就繼續執行在遇到u=height(t->lchild); 在調這個函式本身——

這裡就假設它為t->lchild==null吧。這下可好,這個函式執行return 0;

慢著:第二次函式呼叫u=height(t->lchild)中的函式值已經計算出來啦。這時u=0;

你還記得第二次呼叫執行到了v=height(t->rchild); 這句話吧?好,這個過程就和u=height(t->lchild)完全一樣。

這裡也假設得到的v=0

則第二次呼叫到了if (u>n) return (u+1)

return (v+1)

得到一個返回值,不如就假設u〉n,於是返回值1;

好,這一波完畢;

你還記得第一次呼叫的height吧,這時把返回值給u,u=1;

然後執行到第一次呼叫中的v=height(t->rchild); 了。分析同上。

這個過程的確比較複雜。慢慢琢磨吧。呵呵。

4樓:金鑽世家

基本思路就是如果當前節點還有子節點,則繼續訪問,遞迴的找尋子節點直到葉子節點為止。

procedure tree(a:node,depth:integer);

begin

if resultnil then tree(a.leftchild,depth+1);

if a.rightchild<>nil then tree(a.rightchild,depth+1);

end;

注:result是全域性變數,是結果

實際上最好不用什麼全域性變數

int depth(node *bt)

全域性變數是bug

int height(bitree t)

// struct bnode

5樓:匿名使用者

意思就是

某結點的深度height(t)

等於他的深度最大的子樹的深度height(t的最深子樹)加1 return heitht(t的最深子樹)+1

6樓:匿名使用者

我記得資料結構書上好像是有,可能是非遞迴的,具體的忘記了,不過當時我也是挺懵的,到現在也不是很明白其所以然!

7樓:青蔥歲月如歌般

這樣理解對嗎?同學?

1.編寫遞迴演算法,計算二叉樹中葉子結點的數目

8樓:邢丹青

#include

using namespace std;

typedef struct tnode//二叉樹結構*bitree;

中序遍歷方式建立二叉樹 ,輸入#代表該結點為空

else t=null;

}int countleaf(bitree t)}return leafnum;

}//用來測試的main函式,

int main()

9樓:匿名使用者

#include

using namespace std;static int sum=0;template

void count(t* root)

}int main(void) //這裡bai我沒有樹的du節點zhi定義,所以直

dao接用模板回

替代答了

10樓:匿名使用者

第三題:console.write("請輸入一抄個字元bai串(以@du結束):");

string str = console.readline();

if (str[str.length - 1] == '@')else

for (int i = str.length - 2; i >= str.length / 2 - 1; i--)

if (str1.equals(str2))else}}

else

11樓:學習學習ing中

#include

#include

struct node;

typedef struct node node;

node *create()

else p=null;

return p;

}int run(node *t)

}return count;

}main()

printf("\n");}

中序遞迴遍歷二叉樹的演算法?(資料結構)

12樓:匿名使用者

#include

#include

#define maxsize 100

typedef char elemtype;

typedef struct node

bitnode;

}}j++;

ch=str[j];}}

bitnode *find(bitnode *b,elemtype x)

}bitnode *lchild(bitnode *b)bitnode *rchild(bitnode *b)int bitreedepth(bitnode *b)void visit(char ch)

/*先序遍歷二叉樹*/

void preorder(bitnode *b)}/*中序遍歷二叉樹*/

void inorder(bitnode *b)}/* 後序遍歷二叉樹*/

void postorder(bitnode *b)} void main()

printf("\n");

printf("(3)二叉樹b的深度為:%d\n",bitreedepth(b));

printf("(4)先序遍歷序列為:");

preorder(b);

printf("\n(5)中序遍歷序列為:");

inorder(b);

printf("\n(6)後序遍歷序列為:");

postorder(b);

printf("\n");}

13樓:呆啊呆啊呆

seek( 某一節點)

14樓:匿名使用者

#include

using namespace std;

#include

#include

#include

#define maxsize 20 //最大結點個數

//#define n 14 //必須輸入結點個數(包含虛結點)

#define m 10 //最大深度

typedef struct nodebitree;

bitree*q[maxsize];

bitree*creatree()

rear++;

q[rear]=s;

if(rear==1)

else

else

if(rear%2==1)

front++;

}//i++;

cin>>ch;

}return t;

}int countleaf(bitree* t)

int treedepth(bitree *t)

}void output(bitree*t) //輸出列印二叉數

cout

output(t->lchild );}}

int menu_select( )

return sn;

} int main( )

}return 0;

} /*void main()*/

15樓:匿名使用者

void inorder ( bitptr t )}

資料結構演算法判斷兩棵二叉樹是否等價

網際網路 逸白 include include include typedef char datatype typedef struct node bitree bitree createtree bitree root root bitree malloc sizeof bitree root d...

求程式 線索二叉樹插入刪除運算,線索二叉樹的插入和刪除

include include malloc.h include windows.h define maxsize 20 規定樹中結點的最大數目 typedef struct nodebithptr bithptr q maxsize 建隊,儲存已輸入的結點的地址 bithptr creattree...

知道二叉樹有n個節點求這種二叉樹有幾種形態

假面 記n個節點的二叉樹形態個數為a n 1 0個節點的二叉樹只有1種形態,a 0 0 1個節點的二叉樹只有1種形態,a 1 1 2 n個節點 n 2 的二叉樹有 a n m 0到n 1 a m a n m 1 求和的每一項,分別表示根的左子樹為m個節點 右子樹為 n m 1個節點的情況 剛好就是c...