// 求二叉樹的深度和寬度.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中所有元素出佇列的同時,將下一層的元素進佇列,完成交接。這樣,便可以清晰地知道每一層中節點的多少...