8 二叉樹複習

2021-10-18 03:59:33 字數 2804 閱讀 8155

構建二叉樹:左子結點小於根節點,右子結點大於根節點

// 二叉樹**

public class binarytree, value>

//向樹中新增元素key-value

public void put(key key, value value)

//向指定的樹x中新增key-value,並返回新增元素後新的樹

private node put(node x, key key, value value)

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

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

return x;

}//查詢樹中指定key對應的value

public value get(key key)

//從指定的樹x中,查詢key對應的值

public value get(node x, key key)

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

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

}// 刪除樹中key對應的value

public void delete(key key)

// 刪除指定樹x中的key對應的value,並返回刪除後的新樹

public node delete(node x, key key)

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

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

//2.如果當前結點的左子樹不存在,則直接返回當前結點的右子結點

if (x.left == null)

//3.當前結點的左右子樹都存在

找到右子樹中最小的結點

node minnode = x.right;

while (minnode.left != null)

刪除右子樹中最小的結點

node n = x.right;

while (n.left != null) else

}讓被刪除結點的左子樹稱為最小結點minnode的左子樹,讓被刪除結點的右子樹稱為最小結點minnode的右子樹

minnode.left = x.left;

minnode.right = x.right;

讓被刪除結點的父節點指向最小結點minnode

x = minnode;

}//個數 -1

n--;

return x;

}public queuepreergodic()

//使用前序遍歷,把指定樹x中的所有鍵放入到keys佇列中

private void preergodic(node x, queuekeys)

keys.enqueue(x.key);

//2.找到當前結點的左子樹,如果不為空,遞迴遍歷左子樹

if (x.left != null)

//3.找到當前結點的右子樹,如果不為空,遞迴遍歷右子樹

if (x.right != null)

}//使用中序遍歷,把指定樹x中的所有鍵放入到keys佇列中

private void midergodic(node x, queuekeys)

//2.找到當前結點的左子樹,如果不為空,遞迴遍歷左子樹

if (x.left != null)

keys.enqueue(x.key);

//3.找到當前結點的右子樹,如果不為空,遞迴遍歷右子樹

if (x.right != null)

}//使用後序遍歷,把指定樹x中的所有鍵放入到keys佇列中

private void afterergodic(node x, queuekeys)

//2.找到當前結點的左子樹,如果不為空,遞迴遍歷左子樹

if (x.left != null)

//3.找到當前結點的右子樹,如果不為空,遞迴遍歷右子樹

if (x.right != null)

keys.enqueue(x.key);

}// 使用層序遍歷得到樹中所有的鍵

public queuelayerergodic()

if (n.right != null)

}return keys;

}// 計算整個樹的最大深度

public int maxdepth()

//計算指定樹x的最大深度

private int maxdepth(node x)

int max = 0;

int maxl = 0;

int maxr = 0;

//2.計算左子樹的最大深度;

if (x.left != null)

//3.計算右子樹的最大深度;

if (x.right != null)

//4.當前樹的最大深度=左子樹的最大深度和右子樹的最大深度中的較大者+1

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

return max;

}private class node

}public static void main(string args)

system.out.println();

queue = bt.layerergodic();

for (string key : queue)

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

}}

複習 二叉樹 樹

樹是一種很常用的資料結構,日後的學習中會經常碰到運用樹的知識。構造二叉樹 include include include using namespace std 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空...

複習二叉樹之線索二叉樹

include 線索二叉樹是在遍歷的過程中線索化 typedef struct bithrnodebithrnode,bithrtree bithrtree pre 全域性變數 建立二叉鍊錶 先序遍歷建立 關鍵在於 表明空樹 void createbitree bithrtree a else 為什...

8 二叉樹遍歷

typedef struct node node node root 先序遍歷 dlr node root 中序遍歷 ldr node root 後序遍歷 lrd node root 通過先序遍歷和後序遍歷確定不了乙個數。bintree createbtpre return t 分析1 什麼時候訪問...