package com.swust.二叉樹;
/** * 滿二叉樹:所有節點(非葉子節點),左右子樹均非空
* * 完全二叉樹:非滿的節點,必然在整棵樹的右下角
* * 二分搜尋樹的每個節點的值: 大於其左子樹的所有節點的值 小於其右子樹的所有節點的值
*/public inte***ce bstinte***ce>
// }
// // private node root;
// private int size;
int size();
boolean isempty();
/*********************************** 包含開始 ***************************************/
// 看二分搜尋樹中是否包含元素e
boolean contains(e e);
// 看以node為根的二分搜尋樹中是否包含元素e, 遞迴演算法
// private boolean contains(node node, e e)
/*********************************** 包含結束 ***************************************/
/*********************************** 增開始 ***************************************/
// 向二分搜尋樹中新增新的元素e
void add(e e);
// 向以node為根的二分搜尋樹中插入元素e,遞迴演算法
// 返回插入新節點後二分搜尋樹的根
// private node add(node node, e e)
/*********************************** 增結束 ***************************************/
/*********************************** 遍歷開始 ***************************************/
// 二分搜尋樹的前序遍歷
void preorder();
// private void preorder(node node)
// 二分搜尋樹的前序遍歷【非遞迴。入隊順序:先右子樹,再左子樹】
void preordernr();
// 二分搜尋樹的中序遍歷
void inorder();
// 二分搜尋樹的後序遍歷
void postorder();
// 二分搜尋樹的層序遍歷[入隊順序:先左子樹,再右子樹]
void levelorder();
/*********************************** 遍歷結束 ***************************************/
/*********************************** 查開始 ***************************************/
// 尋找二分搜尋樹的最小元素
/*** 1 遞迴找到最左側的節點
*/e minimum();
// 返回以node為根的二分搜尋樹的最小值所在的節點
// private node minimum(node node);
// 尋找二分搜尋樹的最大元素
/*** 1 遞迴找到最右側的節點
*/e maximum();
// 返回以node為根的二分搜尋樹的最大值所在的節點
// private node maximum(node node);
/*********************************** 查開始 ***************************************/
/*********************************** 刪開始 ***************************************/
// 從二分搜尋樹中刪除最小值所在節點, 返回最小值
e removemin();
// 刪除掉以node為根的二分搜尋樹中的最小節點
// 返回刪除節點後新的二分搜尋樹的根
/*** 1 遞迴找到最小的節點 2 父節點的左孩子=待刪除節點的右孩子
*/// private node removemin(node node)
// 從二分搜尋樹中刪除最大值所在節點
e removemax();
/*** 1 遞迴找到最大的節點 2 父節點的右孩子=待刪除節點的左孩子
*/// private node removemax(node node)
/*** 從二分搜尋樹中刪除元素為e的節點 1 遞迴查詢到待刪除的節點 2 待刪除節點三種狀態: 2.1 左子樹空 2.2 右子樹空 2.3 左右子樹非空
* 2.3.1 找到待刪除節點cur右子樹最小的節點,命名為successor 2.3.2
* successor右子樹為(cur右子樹,這個右子樹已經刪除最小節點) 2.3.3 successor左子樹為(cur左子樹)
* * @param e
*/void remove(e e);
// 刪除掉以node為根的二分搜尋樹中值為e的節點, 遞迴演算法
// 返回刪除節點後新的二分搜尋樹的根
// private node remove(node node, e e)
/*********************************** 刪結束 ***************************************/
}
二叉樹常用介面
二叉樹問題用遞迴來解決時 是從葉子結點 往根的方向 從下往上來實現的 關係 總結點個數 根 左子樹結點個數 右子樹結點 個數 終止條件 root null int size node root 關係 總葉子結點 左子樹葉子結點個數 右子樹葉子結點個數 終止條件 root null 和 root le...
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹與二叉樹定義
樹是n n 0 個節點的有限集合t。當n 0時,稱為空樹 當n 0時,該集合滿足如下條件 1.其中必有乙個稱為根 root 的特定節點,它沒有直接前驅,但又0個或多個直接後繼 2.其餘節點可分為m m 0 個互不相交的有限集t1 t2 tm,其中每乙個集合本身又是一棵樹,並且稱為根的子樹 suntr...