求二叉樹的每個結點的子孫數量

2021-07-09 16:06:55 字數 787 閱讀 8606

《資料結構》嚴蔚敏版習題6.55

為二叉鍊錶的結點增加descnum域,表示該結點的子孫數量。編寫乙個演算法,求二叉樹的每個結點的子孫數目並存入其descnum域。

思路:

/*

求每個結點的子孫數目

*/#include "bitree.h"

typedef

struct mytnode

mybitree, *pmybitree;

void mycreat_tree(pmybitree &rt)

else

}void descnumber(pmybitree &rt)

cur = s.top();

if(cur->rchild == null || cur->rchild == pre)

else

}}void preorderprintdesc(pmybitree &rt)

cout

<< '@'

<< endl;

}int main(int argc, char

const *argv)

函式void descnumber(pmybitree &rt)計算出二叉樹rt的所有結點的descnum域。它利用後續遍歷的思路,不同之處僅在:本來應該列印當前結點的時候,根據是否存在左右結點,計算本結點的子孫數。此題也充分說明了二叉樹的3中遍歷方法的重要性,可以讓很多問題不用遞迴,也不用很高的複雜的就能解決。此演算法複雜度為o(n)。

求二叉樹的雙親結點

思路就是如果當前任乙個孩子結點的值等於k,說明當前節點即為所需結點的雙親結點,通過遞迴實現唯一比較麻煩的是要寫很多條件,不然會報錯。主要功能實現是preorder函式其他是構建和列印二叉樹的函式。include include include using namespace std define t...

求二叉樹某個結點的祖先

考試做到這一題,當時寫的很亂,這讓我很煩,題目就是在二叉樹查詢某個值的結點,如果找到則輸出該節點的所有祖先,那我當時想到的就是用後序遍歷的非遞迴演算法,如果找到的話,棧中的所有元素就是該節點的祖先,不過後序遍歷的話需要用乙個標記記錄棧頂元素,第一次訪問棧頂的元素的時候不出棧,第二次訪問棧頂元素的時候...

尋找二叉樹中每個結點的根結點(遞迴演算法)

筆者查閱了網上關於二叉樹尋找根結點的演算法,眾說紛紜,有 在節點結構體中加一條指向父節點的指標 非遞迴遍歷樹的方式尋找父節點 直接利用樹的遞迴遍歷,列印輸出父節點 筆者認為新增父節點指標的方法,不能很好地體現樹的邏輯結構。樹的結構體 特指二叉樹的儲存結構 已經很成熟而且近乎約定俗成了,再重新新增乙個...