資料結構與演算法(4) 樹

2021-10-08 18:57:32 字數 4654 閱讀 8966

結點的度:

乙個結點含有的子樹的個數稱為該結點的度

葉結點:

度為0的結點稱為葉結點,也可以叫做終端結點

分支結點:

度不為0的結點稱為分支結點,也可以叫做非終端結點

結點的層次:

從根結點開始,根結點的層次為1,根的直接後繼層次為2,以此類推

結點的層序編號:

將樹中的結點,按照從上層到下層,同層從左到右的次序排成乙個線性序列,把他們編成連續的自然數

樹的度:

樹中所有結點的度的最大值

樹的高度(深度):

樹中結點的最大層次

森林:m(m>=0)個互不相交的樹的集合,將一顆非空樹的根結點刪去,樹就變成乙個森林;給森林增加乙個統一的根

結點,森林就變成一棵樹

孩子結點:

乙個結點的直接後繼結點稱為該結點的孩子結點

雙親結點(父結點):

乙個結點的直接前驅稱為該結點的雙親結點

兄弟結點:

同一雙親結點的孩子結點間互稱兄弟結點

概念:二叉樹就是度不超過2的樹(每個結點最多有兩個子結點)

分類:

二叉查詢樹

public class 二叉樹 

system.out.println("-------------前序遍歷-------------");

// 中序遍歷

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

queue queue2 = binarytree.midergodic();

for (object o : queue2)

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

// 後序遍歷

system.out.println("-------------後序遍歷-------------");

queue queue3 = binarytree.prevergodic();

for (object o : queue3)

system.out.println("-------------後序遍歷-------------");

// 層序遍歷

system.out.println("-------------層序遍歷-------------");

queue queue4 = binarytree.layerergodic();

for (object o : queue4)

system.out.println("-------------層序遍歷-------------");

// 最大深度

system.out.println("-------------最大深度-------------");

system.out.println(binarytree.maxdepth());

system.out.println("-------------最大深度-------------");

system.out.println("最小鍵 --> " + binarytree.getminkey());

system.out.println("最大鍵 --> " + binarytree.getmaxkey());

system.out.println(binarytree.isempty());

system.out.println(binarytree.size());

binarytree.iter();

binarytree.delete(1);

binarytree.delete(2);

binarytree.delete(4);

binarytree.delete(5);

binarytree.delete(3);

system.out.println(binarytree.isempty());

system.out.println(binarytree.size());

binarytree.iter();

binarytree.put(3, "zs");

binarytree.put(1, "xy");

binarytree.iter();

}}class binarytree

}// 根節點

private noderoot = null;

private int count = 0;

public int size()

public void put(key key, value value)

private node put(nodenode, key key, value value) else else if (cmp < 0) else

}return node;

}public value get(key key)

private value get(nodenode, key key)

int cmp = key.compareto(node.key);

if (cmp > 0) else if (cmp < 0)

return (value) node.value;

}public void iter()

iter(root);

}private void iter(nodenode)

system.out.println(node.key + "->" + node.value);

if (node.right != null)

}public boolean isempty()

public void delete(key key) else if (size() == 1) else

count--;

}private nodedelete(nodenode, key key)

int cmp = key.compareto(node.key);

if (cmp > 0) else if (cmp < 0) else

if (node.right == null)

if (node.left == null)

node minnode = node.right;

while (minnode.left != null)

node minlastnode = node.right;

while (minlastnode.left != null) else

}if (minlastnode == node.right) else

if (node == root)

node = minnode;

}return node;

}// 獲取最小鍵

public key getminkey()

// 獲取最大鍵

public key getmaxkey()

// 獲取最小鍵

private node getminkey(node node) else

}// 獲取最大鍵

private node getmaxkey(node node) else

}// 前序遍歷

// 獲取整個樹種所有的鍵

public queue preergodic()

//獲取指定樹中的所有鍵,並放到佇列中

public void preergodic(node node, queue keys)

keys.enqueue(node.key);

if (node.left != null)

if (node.right != null)

}// 中序遍歷

// 獲取整個樹種所有的鍵

public queue midergodic()

//獲取指定樹中的所有鍵,並放到佇列中

public void midergodic(node node, queue keys)

if (node.left != null)

keys.enqueue(node.key);

if (node.right != null)

}// 後序遍歷

// 獲取整個樹種所有的鍵

public queue prevergodic()

//獲取指定樹中的所有鍵,並放到佇列中

public void prevergodic(node node, queue keys)

if (node.left != null)

if (node.right != null)

keys.enqueue(node.key);

}// 層序遍歷

public queuelayerergodic()

if (dequeue.object.right != null)

}return keys;

}// 最大深度

public int maxdepth()

private int maxdepth(node node)

if (node.right != null)

max = maxl > maxr ? maxl + 1 : maxr + 1;

return max;

}}

資料結構與演算法 樹

後序遍歷 已知前序和中序求後序 設計 的原則 1 有且僅有乙個根節點 2 所有的子樹也滿足該要求 子樹之間不能有交集 單個節點也是一棵樹 空樹 啥資料都沒有,沒有任何節點 根節點 父節點,子節點,兄弟節點 如果兩個節點的父節點雖不相同,但是它們的父節點處在同一層次上,那麼這兩個節點是兄弟節點 葉子節...

演算法與資料結構 樹

搜尋 如上圖所示 圓圈代表結點,連線結點的線代表邊。樹由結點和連線結點的邊組成。2 有根結點的父子關係 如圖根結點為0,連線根結點0到結點4最後一條邊連線著結點1和4,則結點1稱為結點4的父節點,結點4 為結點1 的子節點。結點2,3為結點4的兄弟結點。3 根結點 沒有父節點的結點 唯一 外部結點 ...

資料結構與演算法(樹)

1 樹的定義 2 基本術語 3 樹的性質 1 二叉樹定義及特性 2 二叉樹的儲存結構 1 二叉樹遍歷 1 樹的儲存結構 2 樹 森林 二叉樹的轉換 樹轉換為二叉樹的規則 每個節點左指標指向它的第乙個孩子,右指標指向它在樹種的相鄰右兄弟。根節點沒有兄弟,所以對應二叉樹沒有右子樹。樹轉換為二叉樹的方法 ...