C#實現二叉查詢樹
/// <summary> /// 二叉樹節點的定義 /// </summary> public class Node { //本身的資料 public int data; //左右節點 public Node left; public Node right; public void DisplayData() { Console.Write(data + " "); } } public class BinarySearchTree { Node rootNode = null; public void Insert(int data) { Node parent; //包裝資料進節點 Node newNode = new Node(); newNode.data = data; //根節點 if (rootNode == null) { rootNode = newNode; } //找到合適的子節點位置插入 else { Node currentNode = rootNode; while (true) { parent = currentNode; if (newNode.data < currentNode.data) { currentNode = currentNode.left; if (currentNode == null) { parent.left = newNode; break; } } else { currentNode = currentNode.right; if (currentNode == null) { parent.right = newNode; break; } } } } } /// <summary> /// 中序遍歷 /// </summary> /// <param name="theRoot"></param> public void InOrder(Node theRoot) { if (theRoot != null) { InOrder(theRoot.left); theRoot.DisplayData(); InOrder(theRoot.right); } } //先序遍歷 public void PreOrder(Node theRoot) { if (theRoot != null) { theRoot.DisplayData(); PreOrder(theRoot.left); PreOrder(theRoot.right); } } //後序遍歷 public void PostOrder(Node theRoot) { if (theRoot != null) { PostOrder(theRoot.left); PostOrder(theRoot.right); theRoot.DisplayData(); } } public void FindMax() { Node current = rootNode; //找到最右邊的即可 while (current.right != null) { current = current.right; } Console.WriteLine("max:" + current.data); } public void FindMin() { Node current = rootNode; //找到最左邊的節點即可 while (current.left != null) { current = current.left; } Console.WriteLine("min:" + current.data); } public Node Search(int i) { Node current = rootNode; while (true) { if (i < current.data) { if (current.left == null) break; current = current.left; } else if (i > current.data) { if (current == null) break; current = current.right; } else { return current; } } if (current.data != i) { return null; } return current; } public Node Delete(int key) { Node parent = rootNode; Node current = rootNode; //首先找到需要被刪除的節點和其父節點 while (true) { if (key < current.data) { if (current.left == null) break; parent = current; current = current.left; } else if (key > current.data) { if (current == null) break; parent = current; current = current.right; } else { break; } } //找到被刪除的節點後,分四種情況 //1.當是子節點的時候,直接刪除 if (current.left == null && current.right == null) { if (current == rootNode && rootNode.left == null && rootNode.right == null) { rootNode = null; } else if (current.data < parent.data) { parent.left = null; } else { parent.right = null; } } //所刪除的節點只有左節點的時 else if (current.left != null && current.right == null) { if (current.data < parent.data) parent.left = current.left; else parent.right = current.left; } //所刪除的節點只有右節點時 else if (current.left == null && current.right != null) { if (current.data < parent.data) parent.left = current.right; else parent.right = current.right; } //當刪除的節點有左右節點的時候 else { //current是被刪除的節點,temp是被刪左子樹最右邊的節點 Node temp; //先判斷是父節點的左節點還是右節點 if (current.data < parent.data) { parent.left = current.left; temp = current.left; //尋找被刪除節點最深的右孩子 while (temp.right != null) { temp = temp.right; } temp.right = current.right; } //右節點 else if (current.data > parent.data) { parent.right = current.left; temp = current.left; //尋找被刪除節點最深的左孩子 while (temp.left != null) { temp = temp.left; } temp.right = current.right;
點選開啟連結 } //當被刪節點是根節點,並且有兩個孩子時 else { temp = current.left; while (temp.right != null) { temp = temp.right; } temp.right = rootNode.right; rootNode = current.left; } } return current; } }
相關推薦
C#實現二叉查詢樹
/// <summary> /// 二叉樹節點的定義 /// </summary> public class Node { //本身的資料 public int dat
C++:二叉查詢樹實現(二)——遍歷操作
建立好二叉樹,有時候我們需要對整個二叉樹錦星遍歷,即輸出二叉樹的所有結點元素。理論上,遍歷的方式有無數種,順序可以自己任意選定,但是絕大部分遍歷方式在實際中並沒有用處,比較有用的的遍歷方式有兩種:廣度優先遍歷、深度優先遍歷。 (1)廣度優先遍歷
[C語言實現]實現二叉查詢樹基本操作(遞迴版,圖示)
定義 二叉查詢樹是一種特殊的二叉樹,它不僅是一顆二叉樹,還滿足如下性質 對於任何非葉子節點,他的左節點都小於它本身,而右節點都大於其本身. 它的左右子樹也分別而二叉搜尋樹 一般情況下,在這麼一棵樹中進行查詢,它的時間複雜度是 longnlon
C語言實現二叉查詢樹(BST)的基本操作
我們在上一篇部落格中講解了二叉樹,這一次我們來實現二叉樹的進階——二叉查詢樹(Binary Search Tree),又稱二插排序樹(Binary Sort Tree)。所以簡稱為BST。二插查詢樹的定義如下:1.若左子樹不為空,則左子樹上所有節點的值均小於它的根節
C++實現二叉排序樹BSTree --插入刪除摧毀查詢等操作
#ifndef _BSTREE_H #define _BSTREE_H #include <iostream> #include <assert.h> using namespace std; template <typename T> class BSTree; t
C語言實現二叉查詢樹的輸出
二叉樹是資料結構和演算法中的重要部分。本文將簡單介紹其中的一類——二叉查詢樹: 二叉排序樹(BinarySortTree),又稱二叉查詢樹、二叉搜尋樹。它或者是一棵空樹;或者是具有下列
JS 實現二叉查詢樹(Binary Search Tree)
知識點 二叉查詢樹,也稱二叉搜尋樹、有序二叉樹(英語:ordered binary tree)是指一棵空樹 任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 任意節點的左、
python3 實現二叉查詢樹的搜尋、插入、刪除
1. 定義 二叉查詢樹(Binary Search Tree),又稱為二叉搜尋樹、二叉排序樹。其或者是一棵空樹;或者是具有以下性質的二叉樹: 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 若右子樹不空,則右子樹上所有結點的值均大於或等於它的
C++實現二叉排序樹
1.定義 二叉排序樹(Binary Sort Tree),又稱二叉查詢樹(Binary Search Tree),亦稱二叉搜尋樹。 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; (2)若右子樹不空,則右子樹上所
前端你也需要了解的演算法,二叉樹概念及JS實現二叉查詢樹
前述:樹是電腦科學中經常用到的一種資料結構。樹是一種非線性的資料結構,以分層的形式儲存資料。樹被用來儲存具有層級關係的資料結構,比如檔案系統中的檔案;樹還被用來儲存有序列表。 樹的定義 樹是由一組以邊連線的節點組成。公司的組織結構圖就是一個樹的例子。 二叉樹 二叉
js實現二叉查詢樹的建立、插入、刪除、遍歷操作
1 概念 二叉排序樹(二叉查詢樹),它或者是一顆空樹,或者是具有以下性質的二叉樹: 任意一個結點左子樹上的所有結點值均小於該結點值 任意一個結點右子樹上的所有結點值均大於該結點值 例如下圖: 2 插入和建立二叉排序樹 結點的資料結構 fu
C++實現二叉搜尋樹(遞迴&非遞迴)
二叉搜尋樹(Binary Search Tree)的性質: 1、每個節點都有一個作為搜尋關鍵碼的key,並且所有節點的key都不相同。 2、左子樹上的key值都小於根節點的key值。 3、右子樹上的key值都大於根節點的key值。 4、左右子樹都是二叉搜
C++實現二叉搜尋樹(二叉排序樹)模板類
參考了Weiss的資料結構與演算法分析C++描述第三版 在中文版中,第99頁貌似有個錯誤。在4.3.6 平均情況分析中,書上寫的是“直觀地,我們期望前一節所有的操作特別是makeEmpty 和 operator=都花費O(logN)時間,……”,我感覺不太對,因為make
python實現二叉查詢樹
1. 定義 二叉查詢樹(Binary Search Tree),又稱為二叉搜尋樹、二叉排序樹。其或者是一棵空樹;或者是具有以下性質的二叉樹: 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 若右子樹不空,則右子樹上所有結點的值均大於或等於它
java實現二叉查詢樹(插入、刪除、遍歷、查詢)
閒話: 繼續擼資料結構和演算法。看資料結構推薦一個視覺化工具吧(http://visualgo.net/),沒有圖憑腦袋想是很痛苦的。 正文: 二叉查詢樹,也叫二叉搜尋樹、有序二叉樹,排序二叉樹,滿足以下性質(非嚴謹描述): 1.對於每個節點,其左子節點要麼
java實現二叉查詢樹
package ustc.zyy.ArrayList; /** * @author zhang yin ye * @date 2014 6 17 * */ import java.util.DuplicateFormatFlagsException; pu
二叉查詢樹的查詢、插入、刪除、釋放等基本操作的實現(C語言)
二叉查詢樹是一種特殊性質的二叉樹,該樹中的任何一個節點,它的左子樹(若存在)的元素值小於節點的元素值,右子樹(若存在)的元素值大於節點的元素值。 實現了二叉樹查詢樹的實現以及基本操作,包括查詢、插入、刪除、初始化、釋放等。 原始碼下載地址:http://download.c
資料結構之 二叉查詢樹(C語言實現)
資料結構之 二叉查詢樹 1. 二叉查詢樹的定義 二叉查詢樹(binary search tree)是一棵二叉樹,或稱為二叉搜尋樹,可能為空;一棵非空的二叉查詢樹滿足一下特徵: 每個元素有一個關鍵字,並且任意兩個元素的關鍵字都不同;因此,所有的關鍵字都是唯
資料結構——二叉查詢樹的詳細實現(c++)
本文實現了二叉查詢樹的前序遍歷(遞迴與非遞迴)、中序遍歷(遞迴與非遞迴)、後序遍歷(遞迴與非遞迴)、插入過程、刪除過程、查詢過程等。 二叉樹的簡單介紹: 1、二叉樹中的每個節點都不能有多餘兩個的兒子。 2、二叉樹的深度要比N小得多。 假設每個節點被指
c++實現二叉樹的插入、刪除、查詢、遍歷和樹形列印
binary_tree.h 宣告 #ifndef BINARY_TREE #define BINARY_TREE #include "util.h" template<typename T> class tree_node { public: tree_