求二叉樹的深度和寬度

2021-09-09 03:10:34 字數 1359 閱讀 6075

// 求二叉樹的深度和寬度.cpp : 定義控制台應用程式的入口點。

#include "stdafx.h"

#include #include using namespace std;

struct btnode

;//先序建立二叉樹

void creatbtree(btnode *&root)

else }

//求二叉樹的深度

int getdepth(btnode *proot)

// int nleftlength = getdepth(proot->m_left);

// int nrigthlength = getdepth(proot->m_right);

// return nleftlength > nrigthlength ? (nleftlength + 1) : (nrigthlength + 1);

return getdepth(proot->m_left) > getdepth(proot->m_right) ?

(getdepth(proot->m_left) + 1) : (getdepth(proot->m_right) + 1);

}//求二叉樹的寬度

int getwidth(btnode *proot)

int nlastlevelwidth = 0;//記錄上一層的寬度

int ntemplastlevelwidth = 0;

int ncurlevelwidth = 0;//記錄當前層的寬度

int nwidth = 0;//二叉樹的寬度

queuemyqueue;

myqueue.push(proot);//將根節點入佇列

nlastlevelwidth = 1;

btnode *pcur = null;

while (!myqueue.empty())//佇列不空

if (pcur->m_right != null)

ntemplastlevelwidth--;

} ncurlevelwidth = myqueue.size();

nwidth = ncurlevelwidth > nlastlevelwidth ? ncurlevelwidth : nlastlevelwidth;

nlastlevelwidth = ncurlevelwidth;

} return nwidth;

}int _tmain(int argc, _tchar* ar**)

執行結果:

求二叉樹的深度和寬度

二叉樹的深度 從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。二叉樹的寬度 二叉樹的每一層中都有一定數量的節點,節點數最多的那一層的節點數叫做二叉樹的寬度。假設二叉樹的節點有如下資料結構 struc node 1 求二叉樹的深度 根據剛才對二叉樹深度的說明,...

二叉樹的寬度和深度

遞迴版本 public static intgetdeep treenode root 非遞迴版本 思想 二叉樹的深度就是指二叉樹有幾層,那麼我們可以使用層序遍歷來實現。public static intgetdeep treenode root if p.right null 如果下一層沒有結點,...

二叉樹的寬度和深度

1.二叉樹的寬度 若某一層的節點數不少於其他層次的節點數,那麼該節點數即為二叉樹的寬度。在訪問過程中,我們只需要將同一層中的節點同時入棧即可。為此,我們也只需要知道上一層佇列中元素的多少,在將該queue中所有元素出佇列的同時,將下一層的元素進佇列,完成交接。這樣,便可以清晰地知道每一層中節點的多少...