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

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

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 define maxsize 100 typedef char datatype typedef struct node 二叉樹結點型別 bitree bitree q maxsize 用於建立二叉樹 bitree creatree 函式宣告 int depth bi...

具有結點的完全二叉樹的深度為,具有256個結點的完全二叉樹的深度為 。

根據 二叉樹的第i層至多有2 i 1 個結點 深度為k的二叉樹至多有2 k 1個結點 根結點的深度為1 這個性質 因為2 9 1 700 2 10 1 所以這個完全二叉樹的深度是10,前9層是一個滿二叉樹,這樣的話,前九層的結點就有2 9 1 511個 而第九層的結點數是2 9 1 256 所以第十...

急求關於二叉連結串列問題的演算法題,急求一個關於二叉連結串列問題的演算法題

1 求結點數的遞迴定義為 若為空樹,結點數為0 若只有根結點,則結點數為1 否則,結點數為根結點的左子樹結點數 右子樹結點數 1 2 求葉子數的遞迴定義為 若為空樹,葉子數為0 若只有根結點,則葉子數為1 否則,葉子數為根結點的左子樹葉子數 右子樹葉子數typedef char datatype 定...