資料結構與演算法 平衡二叉樹

2021-10-25 12:38:34 字數 4043 閱讀 2144

總結

**如下(示例):

package binarysorttree;

public class node

@override

public string tostring()

';}//返回左子樹的高度

public int

getleftheight()

return this.left.

getheight()

;}//返回右子樹的高度

public int

getrightheight()

return this.right.

getheight()

;}//查詢以該節點為根節點的樹的高度

public int

getheight()

//左旋轉

public void

leftrotate()

//右旋轉

public void

rightrotate()

//新增節點

public void

add(node node)

if(node.value < this.value)

else

}else

else}if

(this.

getrightheight()

- this.

getleftheight()

>1)

else

return;}

if(this.

getleftheight()

- this.

getrightheight()

>1)

else

return;}

}//查詢要刪除的節點

public node search

(int value)

else

if(this.value < value)

return this.right.

search

(value);}

else

if(this.value > value)

return this.left.

search

(value);}

else

}//查詢要刪除節點的父節點

public node searchparent

(int value)

else

if(this.value > value && this.left != null)

else

if(this.value < value && this.right != null)

else

}//使用中序遍歷列印

public void

infixorder()

system.out.

println

(this.value);if

(this.right != null)

}}

**如下(示例):

package binarysorttree;

public class binarysorttree

//新增節點

public void

add(node node)

else

}//查詢到刪除的這個節點

public node search

(int value)

else

}//查詢要刪除的節點的父節點

public node searchparent

(int value)

else

}//刪除這個節點

public void

deletenode

(int value)

else

//證明targetnode不為空,所以當下面的if成立,targetnode就是root

if(root.right == null & root.left == null)

node parentnode =

searchparent

(value);if

(targetnode.left == null && targetnode.right == null)

else

if(parentnode.right.value == targetnode.value && parentnode.right != null)

}else

if(targetnode.left != null && targetnode.right != null)

else

else

}else

}else

else

}else}}

}}}//查詢右邊節點的最小值min

public int

intmin

(node node)

deletenode

(temp.value)

;return temp.value;

}//中序遍歷

public void

infixorder()

else

}}

**如下(示例):

package binarysorttree;

public class binarysorttreedemo

; binarysorttree binarysorttree = new binarysorttree()

;//將陣列中的每個數依次以節點的形式加入到樹中

for(

int i =

0; i < arr.length; i++

) system.out.

println

("中序遍歷");

binarysorttree.

infixorder()

;/* binarysorttree.deletenode(7);

binarysorttree.deletenode(3);

binarysorttree.deletenode(10);

binarysorttree.deletenode(1);

system.out.println("中序遍歷");

binarysorttree.infixorder();*/

node root = binarysorttree.

getroot()

;int height = root.

getheight()

; system.out.

println

("**********====");

system.out.

println

(height)

;int getleftheight = root.

getleftheight()

; system.out.

println

(getleftheight)

;int getrightheight = root.

getrightheight()

; system.out.

println

(getrightheight);}

}

**是基於二叉排序樹進行改進的。注意左旋轉和右旋轉的條件,也需要注意雙旋轉的條件。

資料結構 平衡二叉樹

1 空樹是平衡二叉樹。2 如果一棵樹不為空,並且其中所有的子樹都滿足各自的左子樹與右子樹的高度差都不超過 1。下面介紹乙個簡單應用,平衡二叉樹的相關操作以後補充。給定一顆二叉樹的頭結點 head,判斷一棵樹是否是平衡二叉樹。1.1 左子樹是否為平衡二叉樹 1.2 記錄左子樹的深度,最深到達哪一層,記...

資料結構與演算法 如何判斷平衡二叉樹?

1.判斷是否是平衡二叉樹 public class isbalancedtree 封裝返回值型別 public static class returndata public static boolean isb node head return process head isb 具體的遞迴函式 pu...

平衡二叉樹 資料結構實驗之查詢二 平衡二叉樹

剛開始接觸平衡二叉樹,沒有什麼太多要分析的。部落格裡有很多大佬們都寫的很好。平衡二叉樹就是每個節點的子樹的高度差不超過1的二叉樹。可以快速搜尋數值的一種演算法,最糟的情況就是一直找到底,但也是log n 的。還是快很多。include include include define max a b a...