//根據中序遍歷序列一定是乙個遞增有序的序列來判斷
int pre=int_min;
//儲存當前節點中序前驅的值
bool
check
(bitree bt)
else
return
false
;return
check
(bt-
>rchild)
;}
void
judge
(bitree bt,
int&bal,
int&h)
else
if(bt-
>lchild==
null
&&bt-
>rchild==
null
)int h1,h2,b1,b2;
judge
(bt-
>lchild,b1,h1)
;judge
(bt-
>rchild,b2,h2)
; h=
max(h1,h2)+1
;if(abs
(h1-h2)
<
2)bal=b1&b2;
else bal=0;
}
每個節點除了data域和左右孩子外,還增加了count成員,儲存以該節點為根節點的子樹的節點個數
思路:
/*
*/typedef
struct nodebstnode,
*bstree;
bstnode*
find
(bstnode *bt,
int k)
else
}
//資料結構
struct treenode };
treenode*
buildtree
(vector<
int>
& preorder, vector<
int>
& inorder,
int l1,
int h1,
int l2,
int h2)
treenode*
buildtree
(vector<
int>
& preorder, vector<
int>
& inorder)
struct treenode };
//遞迴版本
intmaxdepth
(treenode* root)
/*非遞迴版本,利用層次遍歷思想,level代表當前層數,last指向當前層最後乙個節點,當遍歷到last時,代表當
前層結束,level++,並讓last指向下一層最後乙個節點,直到遍歷完成,level為二叉樹的高度
*/int
maxdepth
(treenode* root)
}return level;
}
bool
check
(treenode* root)
bool
check
(treenode*p,treenode *q)
二叉樹 判斷二叉樹是否為完全二叉樹
問題描述 判斷一棵二叉樹是否為完全二叉樹。知識點 完全二叉樹是指除二叉樹的最後一層外,其他各層的節點數達到最大個數,且最後一層的葉節點從左到右連續存在,只缺右側若干節點。演算法實現 class node is complete binary tree public static boolean is...
二叉樹 判斷相同二叉搜尋樹
給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。方法 為每個序列建樹,並利用每棵樹的中序遍歷判斷相同 inclu...
判斷二叉樹是不是平衡二叉樹
1.問題描述 輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。來自 劍指offer 2.分析 我們可以採用後續遍歷,在遍歷根結點之前就可以得到左右子樹的深度及是不是一顆平衡二叉樹。然後在根據左右子樹的深度差值來判斷這棵樹...