二叉查詢樹的特點是每個節點的左子樹上的節點都小於該節點,右子樹上的節點都大於該節點。
1.實現二叉查詢樹,並且支援插入,刪除,查詢操作
資料結構:
public class treenode
public treenode(int val)
}
插入:
//建立二叉樹,即插入
public treenode createtree(int data)
treenode current = root;
treenode p = null;
while(current != null)
}else}}
return root;
}
刪除:需要考慮到刪除節點的子節點情況
//刪除
public void delete(int data)
//如果沒有找到刪除的節點,返回空節點
if(p == null) return;
//如果要刪除的節點同時存在左節點和右節點
if(p.left != null && p.right != null)
p.val = minp.val;
// 聯絡後面的**看就知道如何刪除了!
p = minp;
pp = minpp;
}// 刪除的節點是葉子節點,或者只有乙個葉子節點
//記錄要刪除節點的位置
treenode child ;
if(p.left != null) child = p.left;
else if(p.right != null) child = p.right;
else child = null;
//統一刪除
if(pp == null) root = child; // 刪除的是根節點
else if(pp.left == p) pp.left = child;
else pp.right = child;
}
查詢:
//查詢
public void findintree(int data)
else if(p.val > data)
else
}}
2.實現查詢二叉樹中某個節點後繼節點、前驅節點
後繼節點:該節點右子樹最小的節點
前驅結點:該節點左子樹最大的節點
// 查詢某個節點的前驅節點,左子樹的最大節點
public treenode findmax(int data)
else if(p.val > data)
else
}//如果該節點的左子樹為空,返回空
if(p.left != null) p = p.left;
else return null;
//查詢該節點左子樹的最大值
while(p.right != null)
return p;
}// 查詢某個節點的後繼節點,右子樹的最小節點
public treenode findmin(int data)
if(p.right != null)p = p.right;
else return null;
while(p.left != null)
return p;
}
3.實現二叉樹的前,中,後序以及按層遍歷
前,中,後序遍歷:運用遞迴的思想
//前序遍歷
public void preorder(treenode root)
}//中序遍歷
public void midorder(treenode root)
}//後序遍歷
public void lastorder(treenode root)
}
按層遍歷:借助佇列實現
//按層遍歷
public void breadthorder(treenode root)
}}
二叉查詢樹,實現
public class binarytree 移除乙個節點 分三種情況,乙個是 該節點本身是葉子,乙個是 該節點含有乙個兒子節點 乙個是 該節點還有兩個兒子節點 param e param comareelement private binarynoderemove element e,binar...
二叉查詢樹的實現
因為在關聯容器裡面主要的內部結構是rb tree,而紅黑樹又是一種平衡二叉樹,平衡二叉樹又是屬於二叉查詢樹,所以按照 侯捷介紹的順序依次來實現,今天先把二叉查詢樹這種最簡單的實現掉 首先,二叉查詢樹 不像heap中完全二叉樹那樣記憶體分配用線性儲存的,二叉查詢樹一般內部儲存是通過鍊錶來實現的,首先來...
二叉查詢樹的實現
初學者實現了二叉查詢樹的實現 實現的功能包括 建構函式 西溝函式 判空函式 遞迴搜素 非遞迴搜尋 刪除元素 前序遍歷 中序遍歷 後續遍歷 層遍歷 沒有實現 直接上 吧,請大牛指導 標頭檔案 bst.h includeusing namespace std ifndef bst define bst ...