劍指Offer之 二叉樹的深度

2021-07-02 01:43:07 字數 1336 閱讀 7039

題目:

1、求二叉樹的最大深度和最小深度。

2、判斷一棵二叉樹是不是平衡二叉樹。

**:#include using namespace std;

struct binarytreenode

binarytreenode(int value):m_nvalue(value),m_pleft(null),m_pright(null){}

};//功能:求二叉樹的最大深度和最小深度

int treedepthmax(binarytreenode *proot)

int treedepthmin(binarytreenode *proot)

//功能:判斷一棵樹是不是平衡二叉樹,即任意結點的左右子樹的深度相差不超過1

//思路1:求出每個結點的左右子樹深度,然後再比較,效率較低

bool isbalanced(binarytreenode *proot)

//思路2:記錄下每個結點的深度,並作為形參傳入

//用從下至上遍歷的方式遍歷二叉樹的每乙個結點,在遍歷到乙個結點之前我們已經遍歷了它的左右子樹。只要在遍歷每個結點的時候記錄它的深度

//我們就可以一邊遍歷一邊判斷每個結點是不是平衡的。

bool isbalancedtree(binarytreenode *proot , int *depth)

int left = 0 , right = 0;

if(isbalancedtree(proot->m_pleft , &left) && isbalancedtree(proot->m_pright , &right)) }

return false;

}bool isbalancedtree(binarytreenode *proot)

int main()

{ binarytreenode *p1 = new binarytreenode(1);

binarytreenode *p2 = new binarytreenode(2);

binarytreenode *p3 = new binarytreenode(3);

binarytreenode *p4 = new binarytreenode(4);

binarytreenode *p5 = new binarytreenode(5);

p1->m_pleft = p2;

p1->m_pright = p3;

p3->m_pright = p4;

p4->m_pright = p5;

int depth = treedepthmax(p1);

int mindepth = treedepthmin(p1);

cout<

劍指offer之二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。方法一 可以使用遞迴的方法,分別求左子樹和右子樹的深度,則樹的深度是 更大者 1。這是乙個遞迴的方法。方法二 使用層次遍歷的方法,每訪問一層,則深度 1,所有層的訪問結束之後,就等...

劍指Offer之二叉樹的深度

題目描述 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。輸入 第一行輸入有n,n表示結點數,結點號從1到n。根結點為1。n 10。接下來有n行,每行有兩個個整型a和b,表示第i個節點的左右孩子孩子。a為左孩子,b為右孩子。當a...

劍指offer 二叉樹的深度

輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。如果二叉樹只有根節點那麼深度就是1,如果只有左子樹,那麼就是左子樹的深度加1就是整棵二叉樹的深度 如果只有右子樹,那麼二叉樹的深度就是右子樹的深度加1 如果既有左子樹又有右子樹,那...