構建二叉樹:左子結點小於根節點,右子結點大於根節點
// 二叉樹**
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 什麼時候訪問...