《劍指Offer》面試題 平衡二叉樹

2021-07-05 18:35:17 字數 1382 閱讀 4470

題目

輸入乙個二叉樹的根節點,

判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。

思路:

用後序遍歷實現

先遍歷節點的左右子樹,左右子樹都平衡才來判斷該節點是否平衡,如果左右子樹中有不平衡的,則直接返回false,避免了從上往下逐個節點地計算深度帶來的重複遍歷節點。

#include

#include

struct btreenode;

//判斷乙個節點是否平衡,要先遍歷該節點的左右子樹是否平衡,若都平衡,則該節點平衡,否則該節點就不平衡。

//需要用後續遍歷來進行遞迴求解。

bool isbalancebtree(btreenode *proot,int *pleftheight,int *prightheight)

//只是為了測試,這裡就只是簡單的新建乙個二叉樹

//本來以為這樣建二叉樹要簡單些,沒想到,寫的好累呀

btreenode *createbtree()

pnode1->mvalue=

8; pnode1->mvalue=

4; pnode1->mvalue=

5; pnode1->mvalue=

10; pnode1->mvalue=

3; pnode1->plchild=pnode2;

pnode1->prchild=pnode3;

pnode2->plchild=pnode4;

pnode2->prchild=pnode5;

pnode3->plchild=

null;

pnode3->prchild=

null;

pnode4->plchild=

null;

pnode4->prchild=

null;

pnode5->plchild=

null;

pnode5->prchild=

null;

} bool isbalancebtree(btreenode *pbtnode,int* deep)

int leftdeep,rightdeep;

if(isbalancebtree(pbtnode->plchild, &leftdeep)&&isbalancebtree(pbtnode->prchild, &rightdeep))

else

}}bool isbalancebtree(btreenode *pbtnode)

int main(void)

else

return

0;}

劍指offer之面試題55 2 平衡二叉樹

1 題目 輸入一顆二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中的任意節點的左 右子樹的深度相差不超過1,那麼它就是一顆平衡二叉樹。輸入引數 二叉樹的根節點,指向二叉樹深度的int型指標 輸出結果 true 或者 false 2 解題 這道題的關鍵在於如何在只遍歷一次二叉樹的情況下,對是否...

劍指Offer 面試題 樹和二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。基礎知識 在二叉樹的前序遍歷序列中,第乙個數字總是樹的根節點的值。在中序遍歷序列中,根節點的值在序列的中間,左子樹的節點的...

劍指offer 平衡二叉樹

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹 1 重複遍歷結點 參考上一題求二叉樹的深度,先求出根結點的左右子樹的深度,然後判斷它們的深度相差不超過1,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...