二叉查詢樹

2021-06-05 22:57:50 字數 1652 閱讀 7747

二叉查詢的中序遍歷是乙個有序序列,由於插入與修改都相當簡單,這裡不說了,說一下二叉查詢樹的刪除

刪除結點有三種情況,刪除的結點為p

1.p沒有子結點

2.p有乙個子結點

3.p有兩個子結點

在上面 1.2 兩種情況下的刪除都很簡單,也不多說,只說一下第三種情況

上面說過,二叉樹的中序遍歷是乙個有序序列,如果 [1,2,3,4],當我們刪除2時,可以將3的值賦值給2,然後再將3刪除,

二叉樹的刪除原理和這一樣,我們找到p的後繼結點s,後繼就是按中序搜尋p後的第一點,我們將s的值賦值給p,然後將s 刪除

這裡可能會問,刪除s不是和直接刪除p一樣了麼,都是刪除乙個結點,這裡說明乙個,他們是不一樣的,如果p有乙個孩子或沒有孩子,那麼我們就直接處理,

如果p結點有兩個孩子,

則p結點的後繼點s乙個是乙個有乙個子結點或乙個子結點都沒有,

我們就用上面的方法處理它的後繼結點,這樣就找到了共同點

package trees;

public class binarysearchtree

public boolean add(int value)

entry parent = e;

do while (e != null);

newentry.parent = parent;

if (value < parent.value)

parent.leftchild = newentry;

else

parent.rightchild = newentry;

return false;

} public boolean contains(int value)

private entry containsentry(int value) while (e != null);

return e; }

public boolean remove(int value)

// 結點乙個結點

private boolean removeentry(entry entry)

entry parent = p.parent;

entry child = p.leftchild != null ? p.leftchild : p.rightchild; // 如果 p 有乙個孩子,則按乙個孩子的辦法處理

if (child != null) else

p.parent = p.leftchild = p.rightchild = null; // 將刪除點的鏈結都指空

} else if (parent == null) else

return true;

} // 得到中序遍歷的下乙個結點

private entry successor(entry entry)

return parent;

} else

return e;

} }private void listentry(entry e)

public void list()

// 靜態內部類

static class entry

} public static void main(string args)

}

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...