關於平衡二叉樹的構建

2021-09-18 07:38:44 字數 1844 閱讀 1079

最近在玩資料結構搞到平衡二叉樹部分覺得平衡二叉樹的構建,分享一下自己的二叉樹構建:

**首先是樹的節點的構建:**

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 若這棵二...

關於二叉樹的構建

二叉樹的前序 中序和後序序列中的任何乙個都不能唯一確定一棵二叉樹。二叉樹的構建主要有兩大種方法 第一種是根據前序 中序或者後序 中序來唯一確定二叉樹的結構 這個課本上都有講 第二種是根據二叉樹對應的擴充二叉樹的先序或者後序序列來確定。本文主要討論部分 上面說的第二種,有些文件資料甚至課本裡說根據擴充...