資料結構之二叉樹

2022-03-13 15:40:58 字數 4010 閱讀 6741

樹代表的是層級關係,一對多的關係。

二叉樹是穩定的結構,並且孩子兄弟法是一種用二叉樹的結構來描述任何形狀樹的方法。所以二叉樹是最常使用的樹結構。

樹最常用的情況就是,

1.表示現實中的層級關係,

2.採用樹這種天然分叉的儲存結構來降低搜尋成本,如左大右小,把線性結構搜尋的n週期。立馬減少到log2。

3.0和1編碼以及二叉樹來完成字首編碼。  並在字首編碼的基礎上,發現了最小樹的一種簡便建立方法,hefuman樹來進行非等概離資料的壓縮。

總結:

樹的遍歷,是遞迴的概念。乙個樹由頂點,左樹,右樹構成。 而左樹和右樹也是同樣是樹,一層層遞減,當樹成為了乙個葉子時候,而沒有左右節點的時候就成了基本問題

樹還是有複習的價值。可以複習下遞迴。  find  這個方法中說明乙個問題遞迴要先認真做好分治,使得原問題等於小問題的組合,

並且體現遞迴思路的,最好別合併。沒有十分清楚這句話是什麼意思的話,一定要去看一下find方法第三行。

package com.linson.datastrcture;

////

public

class mybinarytree

public

t element;

public mybinarynodeleftnode;

public mybinarynoderightnode;

}public

mybinarytree()

public

mybinarytree(t _element)

//add

public mybinarynodeinsert(mybinarynodefathernode,boolean isleft,t _value)

else

result=tempnode;}}

return

result;

}//delete

public

void

clear()

//find

public mybinarynodefind(t _value)

//問題組合:找頂點,找左樹,找右樹。 最小規模:找頂點。如果是體現思路的**就不要合併了。比如這裡體現遞迴思路的,最好別合併。

private mybinarynodefind(mybinarynodenode,t _value)

}else

//小一規模遞迴來組合。

else}}

//寫的什麼鬼,結果導向來寫的**,雖然執行正確,但是思路根本沒清晰。

//if(node.element.equals(_value))

////

else

////}}

return

result;

}//type:0:first print parent node .1 left children ,parent, right children. 2:left children ,right children parent.

public

void printtree(int

type)

//列印樹:組合:列印左樹,列印節點,列印右樹。基本情況:葉子。

private

void printtree(mybinarynodenode,int

type)

if(type==0

)

else

//非基本操作,需要遞迴來組合成原問題

if(node.rightnode!=null

) }}

else

if(type==1

)

else

system.

out.println(node.element.tostring());

if(node.rightnode!=null

) }}

else

else

if(node.rightnode!=null

)

system.

out.println(node.element.tostring());}}

}public mybinarynoderootnode=null

;}

通用樹的兄弟孩子結構,也是一種二叉樹

package com.datastructurn;

//應該是樹應用最廣的結構。

//public

class childbrother

public

string tostring()

}public childbrothernoderoot=null

;

public

childbrother(t item)

//add

public childbrothernodeadd(childbrothernodenode,boolean ischild,t value)

else

if((!ischild && node.brother==null

))

return

ret;

}//remove

public

boolean remove(t value)

else

ret=null

; result=true

; }

return

result;

}//modify,find & modify

//find

public childbrothernodefind(t _value,childbrothernoderootnode)

else

if(ret==null && rootnode.child!=null

)

}return

ret;

}public childbrothernodegetrealfather(childbrothernoderootnode)

}tempchecknode=tempchecknode.father;}}

return

ret;

}public

int getreallevel (childbrothernodenode)

return

ret;

}//type:0:first print parent node .1 left children ,parent, right children. 2:left children ,right children parent.

public

void printtree(int

type)

private

void printnodes(childbrothernodenode,int

type,string temp)

if(node.brother!=null

)

}else

if(type==1

)

system.

out.println(temp+node.tostring());

if(node.brother!=null

)

}else

if(node.brother!=null

)

system.

out.println(temp+node.tostring());}}

//update 2 node? myfater and my little brother?

}

資料結構之二叉樹

在二叉樹中每個節點最多只能有兩個子節點。即左子節點和有子節點。在二叉樹中最重要的操作應當是遍歷。即按照某一順序訪問二叉樹中的每乙個節點。一般有如下幾種遍歷方法 1 前序遍歷,即先訪問根幾點,然後再訪問左子節點,最後訪問右子節點。2 中序遍歷,即先訪問左子節點,然後再訪問根節點,最後訪問右子節點。3 ...

資料結構之二叉樹

定義 滿足以下條件的就是樹 1.有且僅有乙個特定的稱為根root的結點。2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每個集合本身又是乙個棵樹,並稱為根的子樹。樹是資料結構中一種常見的資料結構,比如我們排序中常見的二叉樹,紅黑樹等。最常見的是樹形表示法和廣義表表示法。樹的結構示意...

資料結構之二叉樹

來看一下樹的結構 class treenode public treenode string value 首先,為了方便後面看到效果,先手動初始化乙個有4個節點的二叉樹 tree tree new tree treenode root new treenode root treenode node1...