求任意一顆二叉樹的繁茂度

2021-07-09 14:34:45 字數 972 閱讀 3527

在《資料結構》嚴蔚敏版上的習題看到這個問題。

繁茂度的定義:各層節點數的最大值與樹的高度的乘積

樹的深度好求,遞迴呼叫就行了。關鍵在於如何求出各層的最大節點樹?下面是我的一種實現方法:

bitree.h

#include 

#include

#include

#include

using

namespace

std;

typedef

struct tnode

bitree, *pbitree;

void creat_tree(pbitree &rt)

else

}void preorderprint(pbitree &rt)

cout

<< '@'

<< endl;

}void inorderprint(pbitree &rt)

if(!s.empty())

}cout

<< '@'

<< endl;

}

/*

求二叉樹的繁茂度

*/#include "bitree.h"

#include

iint prosperity(pbitree &rt)

}return maxlevelnodes * layers;

}int main(int argc, char

const *argv)

由於跟層有關,所以很自然地想到了用層序遍歷的思路。如果層序遍歷一顆滿二叉樹,那麼下一層的結點樹是上一層的兩倍;那麼,如果上一層的某個結點缺少乙個分支,下一層就會少乙個結點,充分利用這一點,在每一層遍歷結束時就可以算出下一層有多少個節點,這樣就能得出哪一層的結點數最多,now儲存了當前層的結點數,next儲存下一層的結點數(理想情況為兩倍,缺少的減去就行了)。

二叉樹繁茂度

二叉樹的繁茂度 最大寬度 樹的高度 思路 分別求樹的最大寬度和高度,求乘積 輸入 高度為3的滿二叉樹 124 5 36 7 高度為3的完全二叉樹 124 5 36 include include include using namespace std const int maxsize 100 三元...

程式設計練習之一顆二叉樹包含另一顆二叉樹

劍指offer上的一道程式設計練習,如何確定二叉樹a包含一棵相對小一點的二叉樹b?思路 用兩個函式實現,第乙個首先判斷根結點是否相等,第二個函式繼續判斷子結構是否相等 函式一 第一步,首先從根結點入手,判斷proota的值是否與prootb的根結點的值是否相等。若相等,則在比較a樹的子結構是否包含b...

二叉樹面試題(二) 求一顆二叉樹的映象

一 二叉樹的映象就是乙個樹在鏡子裡的成像 好吧!初中的物理知識來了,哈哈,其實很簡單,採用遞迴的方法求二叉樹的映象 1 如果樹為空,直接返回null 2 如果樹不為空,求其左子樹和右子樹的映象,遞迴完成後,將左子樹的映象放在根結點的右邊,將右子樹的映象放在根結點的左邊 二 圖說 三 實現 inclu...