題目
輸入乙個二叉樹的根節點,思路:判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過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,如果否,則不是一棵二叉樹 如果是,再用同樣的方法分別判斷左子樹和右子樹是否為平衡二叉樹,如果都是,則這就是一棵平衡二叉樹。但上面的方法在判斷子樹是否...