最近在玩資料結構搞到平衡二叉樹部分覺得平衡二叉樹的構建,分享一下自己的二叉樹構建:
**首先是樹的節點的構建:**
public class balancenode
public int getvalue()
public void setvalue(int value)
public void add(balancenode balancenode)
//如果新增的節點在左邊
if (balancenode.value < this.value) else
//新增的節點在右邊
} else else
}//判斷是否平衡把樹搞成平衡二叉樹
//首先是左邊的比右邊的高 搞成右旋轉
system.out.println(leftheight()+"---------"+rightheight());
if (leftheight() - rightheight() >= 2) else
}if (rightheight() - leftheight() >= 2) else }}
//左旋轉方法
private void leftroate()
//右旋轉方法
private void rightroate()
//定義乙個取樹的高度的方法
public int height()
//獲取左子樹的高度
public int leftheight()
return leftbalancenode.height();
}//獲取右子樹的高度
public int rightheight()
return rightbalancenode.height();
}public void midlshow()
system.out.println(this.value);
if (this.rightbalancenode != null)
}public balancenode search(int value) else
return this.leftbalancenode.search(value);
} else
return this.rightbalancenode.search(value);}}
}**接下來是樹的建立:**
public class balancebinarytree else
}public void midlshow()
}public balancenode search(int value) else
}public void delete(int value) else else else else
//被刪除節點有兩個子樹
} else if (t.leftbalancenode != null && t.rightbalancenode != null) else else
//有一棵右子樹
} else else }}
}}}}
public balancenode searchparent(int value) else
}private int delmin(balancenode balancenode)
//遞迴呼叫刪除方法
delete(target.getvalue());
return target.getvalue();
}public int height()
這樣就建立了一棵平衡二叉樹,具體的測試方法就不展示了,可以自行造假資料然後測試。
平衡二叉樹例題 平衡二叉樹
acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...
二叉樹 平衡二叉樹
1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...
關於二叉樹的構建
二叉樹的前序 中序和後序序列中的任何乙個都不能唯一確定一棵二叉樹。二叉樹的構建主要有兩大種方法 第一種是根據前序 中序或者後序 中序來唯一確定二叉樹的結構 這個課本上都有講 第二種是根據二叉樹對應的擴充二叉樹的先序或者後序序列來確定。本文主要討論部分 上面說的第二種,有些文件資料甚至課本裡說根據擴充...