通過不斷的插入生成一棵二叉搜尋樹(C語言)
二叉搜尋樹:其各個節點的關鍵字碼必須是唯一的;若某結點左子樹非空,則左子樹上的所有節點的值均小於該結點的關鍵字碼,而其右子樹上的所有節點的值均大於該結點的關鍵字碼。所以,按照中序周遊整個二叉樹的可以得到一個由小到大的有序排列。
通過不斷讀取陣列中的資料而插入生成的二叉搜尋樹的程式碼如下:
輸入輸出如下:/* 二叉搜尋樹 - 通過不斷插入建立一棵二叉搜尋樹 */ #include "stdafx.h" #include <iostream> #include <malloc.h> using namespace std; const int MaxSize = 5; typedef int ElementType; typedef struct bitnode { ElementType data; struct bitnode *left, *right; } bitnode, *bitree; //bitree為指向struct bitnode這種結構的指標 bitree CreateByInsert(bitree T, int item); //通過插入建立二叉搜尋樹 void InOrder(bitree T); //中序遞迴遍歷二叉搜尋樹、其結果一定為遞增序列 bitree FreeTree(bitree T); //釋放二叉搜尋樹的記憶體空間 //通過插入建立二叉搜尋樹 bitree CreateByInsert(bitree T, int item) { if (T == NULL) //樹為空,無根節點的情況,則分配一塊空的bitnode記憶體,建立根節點 { T = (bitree)malloc(sizeof(bitnode)); if (T == NULL) cout << "分配記憶體失敗" << endl; else { T->data = item; T->left = T->right = NULL; } } else //已有根節點,按照二叉搜尋樹的規定,比根節點大的往右放,比根節點小的往左放 { if (item < T->data) T->left = CreateByInsert(T->left, item); //遞迴建立其左子樹 else if (item > T->data) T->right = CreateByInsert(T->right, item); //遞迴建立其右子樹 else //T-data == item,什麼也不幹 { } } return T; //返回根節點 } //中序遞迴遍歷 - 二叉搜尋樹的中序遍歷一定是遞增序列 void InOrder(bitree b) { if (b) // b != NULL { InOrder(b->left); //遞迴遍歷其左子樹 cout << b->data << " "; //訪問根節點 InOrder(b->right); //遞迴遍歷其右子樹 } } //釋放二叉搜尋樹的記憶體空間 bitree FreeTree(bitree T) { if (T != NULL) { FreeTree(T->left); //遞迴釋放其左子樹 FreeTree(T->right); //遞迴釋放其右子樹 free(T); //釋放根節點指向的記憶體空間 T = NULL; //釋放指向根節點的指標,避免野指標 } return T; } int main() { int i; bitree root = NULL; //注意要把根節點初始化為NULL int array[MaxSize]; cout << "請輸入這" << MaxSize << "個節點的資料(資料之間以空格隔開):"; for (i = 0; i < MaxSize; i++) cin >> array[i]; for (i = 0; i < MaxSize; i++) root = CreateByInsert(root, array[i]); cout << "二叉搜尋樹遞迴遍歷的結果:"; InOrder(root); cout << endl; root = FreeTree(root); if (root == NULL) cout << "二叉搜尋樹釋放成功" << endl; return 0; }
相關推薦
通過不斷的插入生成一棵二叉搜尋樹(C語言)
二叉搜尋樹:其各個節點的關鍵字碼必須是唯一的;若某結點左子樹非空,則左子樹上的所有節點的值均小於該結點的關鍵字碼,而其右子樹上的所有節點的值均大於該結點的關鍵字碼。所以,按照中序周遊整個二叉樹的可以得到一個由小到大的有序排列。通過不斷讀取陣列中的資料而插入生成的二叉搜尋樹的程
二叉搜尋樹(C語言)
二叉搜尋樹又稱二叉排序樹,他或者是一顆空樹,或者是具有以下性質的二叉樹 1、若它的左子樹不為空,左子樹上所有節點的值都小於根節點上的值 2、若它的右子樹不為空,右子樹上所有節點的值都大於根節點上的值 它的左右子樹分別為二叉搜尋樹 用搜索關鍵字的方法先定義
04-樹4 是否同一棵二叉搜尋樹 (25 分)
04-樹4 是否同一棵二叉搜尋樹 (25 分) 給定一個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列{2, 1, 3}和{2, 3, 1}插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入
7-4 是否同一棵二叉搜尋樹(25 分)
給定一個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列{2, 1, 3}和{2, 3, 1}插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。
PTA 7-1 是否同一棵二叉搜尋樹(25 分) 建樹比較
利用二叉樹性質 建樹,比較 #include<bits/stdc++.h> using namespace std; const int maxn = 1024 + 7; int n
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列(劍指offer)
題目 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 分析: 在二叉搜尋樹中,每個結點都有兩個分別指向其左、右子樹的指標,左子樹結點的值總是小於父結點的值,右子樹結點的值總是大於父結點的值。在雙向連結串列中,每個結點
[LeetCode] Trim a Binary Search Tree 修剪一棵二叉搜尋樹
Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might
java 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。 比如將二元查詢樹
牛客原題 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
/** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {
資料結構實驗之查詢一:二叉排序樹 (SDUT 3373)
二叉排序樹(Binary Sort Tree),又稱二叉查詢樹(Binary Search Tree),也稱二叉搜尋樹。 #include <stdio.h> #include <string.h> #include <stdlib.h> struct nod
“樹”據結構一:二叉搜尋樹(Binary Search Tree, BST)
前言 定義 來源 演算法 資料結構 查 遍歷 增 刪 總結 參閱 前言 想寫兩篇關於AVL樹和B樹的較為詳細的介紹,發現需要先介紹二叉搜尋樹作為先導。 定義 二叉搜尋樹(Binary Search Thee, BST),也被稱為二
6-21 是否二叉搜尋樹 (25 分)
本題要求實現函式,判斷給定二叉樹是否二叉搜尋樹。 函式介面定義: bool IsBST ( BinTree T ); 其中BinTree結構定義如下: typedef struct TNode *Position; typedef Position BinTree; struct
7-2 是否完全二叉搜尋樹 (30 分)
將一系列給定數字順序插入一個初始為空的二叉搜尋樹(定義為左子樹鍵值大,右子樹鍵值小),你需要判斷最後的樹是否一棵完全二叉樹,並且給出其層序遍歷的結果。 輸入格式: 輸入第一行給出一個不超過20的正整數N;第二行給出N個互不相同的正整數,其間以空格分隔。 輸出格式: 將輸入的N個正
浙大版《資料結構》習題4.3 是否二叉搜尋樹 (25 分)
本題要求實現函式,判斷給定二叉樹是否二叉搜尋樹。 函式介面定義: bool IsBST ( BinTree T ); 其中BinTree結構定義如下: typedef struct TNode *Position; typedef Position BinT
資料結構與演算法 -- 二叉搜尋樹(java實現)
package com.huang.test.datastructure; import java.util.*; /** * 二叉搜尋樹 */ abstract class BstData<T> { BstData<T> left;
LeetCode: 98. 驗證二叉搜尋樹(C++)
題目: 給定一個二叉樹,判斷其是否是一個有效的二叉搜尋樹。 一個二叉搜尋樹具有如下特徵: 節點的左子樹只包含小於當前節點的數。 節點的右子樹只包含大於當前節點的數。 所有左子樹和右子樹自身必須也是二叉搜尋樹。 示例 1: 輸入: 2 / \ 1
資料結構之 二叉查詢樹(C語言實現)
資料結構之 二叉查詢樹 1. 二叉查詢樹的定義 二叉查詢樹(binary search tree)是一棵二叉樹,或稱為二叉搜尋樹,可能為空;一棵非空的二叉查詢樹滿足一下特徵: 每個元素有一個關鍵字,並且任意兩個元素的關鍵字都不同;因此,所有的關鍵字都是唯
資料結構之二叉排序樹(C語言實現)
一、基本概念1.二叉排序樹 二叉排序樹(Binary sort tree,BST),又稱為二叉查詢樹,或者是一棵空樹;或者是具有下列性質的二叉樹: (1)若它的左子樹不為空,則左子樹上所有節點的值均小於它的根節點的值; (2)若它的右
是否二叉搜尋樹(25 分)
習題4.3 是否二叉搜尋樹(25 分)本題要求實現函式,判斷給定二叉樹是否二叉搜尋樹。函式介面定義:bool IsBST ( BinTree T ); 其中BinTree結構定義如下:typedef struct TNode *Position; typedef Positi
二叉搜尋樹BST(C語言實現可用)
1:概述 搜尋樹是一種可以進行插入,搜尋,刪除等操作的資料結構,可以用作字典或優先順序佇列。二叉搜尋樹是最簡單的搜尋樹。其左子樹的鍵值<=根節點的鍵值,右子樹的鍵值>=根節點的鍵值。 如果共有n個元素,那麼每次操作需要的O(log n)的時間. 常用知識