// 二叉樹的生成
function
nodetree
(value)
let ta =
newnodetree
('a');
let tb =
newnodetree
('b');
let tc =
newnodetree
('c');
let td =
newnodetree
('d');
let te =
newnodetree
('e');
let tf =
newnodetree
('f');
let tg =
newnodetree
('g');
ta.left = tb;
ta.right = tc;
tb.left = td;
tb.right = te;
tc.left = tf;
tc.right = tg;
如上面的資料結構,ta是一顆滿二叉樹,也是一顆平衡二叉樹,
平衡二叉樹的定義是啥呢?
條件一:它必須是二叉查詢樹(二叉搜尋樹)。
條件二:每個節點的左子樹和右子樹的高度差至多為1
// 獲取一顆二叉樹的深度
function
getdeep
(doubletree)
/** * 判斷一棵樹是否為平衡二叉樹
* 1.條件, 二叉樹裡面的左右子樹相差不能超過1
* 2.
*/function
balancetree
(doubletree)
if(doubletree.right)
if(math.
abs(leftnum - rightnum)
<=1)
else
}console.
log(
balancetree
(ta)
)// 結果是true
那我們來一顆非平衡的二叉樹,如下:
let ba =
newnode
('ba');
let bb =
newnode
('bb');
let bc =
newnode
('bc');
let bd =
newnode
('bd');
let be =
newnode
('be');
let bf =
newnode
('bf');
ba.left = bb;
ba.right = bc;
bb.left = bd;
bd.right = be;
be.left = bf;
console.
log(
balancetree
(ba)
)// 結果是false
判斷一棵樹是否是平衡二叉樹
題目 程式設計題 平衡二叉樹 時間限制 1000 ms,記憶體限制 256000 kb,長度限制 8000 b 判斷乙個二叉樹是不是平衡 說明 一棵二叉樹任意乙個節點的左右子樹的深度差不大於1,即為平衡二叉樹。給定乙個有n個節點的二叉樹,每個節點有乙個序號表示,樹有m條分支。每個分支用三個數字a b...
二叉樹 判斷一棵樹是否是平衡二叉樹
平衡二叉樹 空樹或者左右兩個孩子高度差不超過1 在涉及到二叉樹的題目時,遞迴函式非常好用 列出可能性 整理出返回值的型別 整個遞迴過程按照同樣的結構得到子樹的資訊,整合子樹的資訊,加工出應該返回的資訊,向上返回 1.左子樹是否平衡 2.右子樹是否平衡 3.左子樹的高度 4.右子樹的高度 根據可能性,...
判斷一棵樹是否為滿二叉樹
首先,我們要知道什麼是滿二叉樹。乙個深度為k,節點個數為 2 k 1 的二叉樹為滿二叉樹。這個概念很好理解。那麼,我們要怎麼判斷一棵樹是否為滿二叉樹呢?思路 在層序遍歷的過程中,找到第乙個非滿節點 non full node 滿節點 full node 指的是同時擁有左右孩子的節點。在找到第乙個非滿...