二叉树:二叉搜索树的创建和插入
生活随笔
收集整理的這篇文章主要介紹了
二叉树:二叉搜索树的创建和插入
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
二叉搜索樹又名二叉排序樹。
大概簡略的思維導圖如下,方便記憶特性
基本二叉搜索樹創建過程如下
/*數據結構如下*/
typedef struct tree
{int data;struct tree *left = NULL;struct tree *right = NULL;
}Tree,*TreeNode;/*Node 為二叉樹根節點,insert為插入的節點*/
void create_tree(TreeNode *node, Tree *insert) {if ((*node) -> data > insert -> data) {if ((*node) -> left) {create_tree(&(*node) ->left,insert);} else {(*node) -> left = insert;}} else {if ((*node) -> right) {create_tree(&(*node) ->right, insert);} else {(*node) -> right = insert;}}
}
查找某一數值是否存在的過程如下:
bool search(Tree *node, int val) {if (node -> data == val) {return true;} if (node -> data > val) {if (node -> left) {return search(node -> left, val);} else {return false;}} else {if (node -> right) {return search(node -> right, val);} else {return false;}}
}
測試代碼如下:
#include <iostream>
#include <stack>
#include <vector>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>using namespace std;typedef struct tree
{int data;struct tree *left = NULL;struct tree *right = NULL;
}Tree,*TreeNode;void create_tree(TreeNode *node, Tree *insert) {if ((*node) -> data > insert -> data) {if ((*node) -> left) {create_tree(&(*node) ->left,insert);} else {(*node) -> left = insert;}} else {if ((*node) -> right) {create_tree(&(*node) ->right, insert);} else {(*node) -> right = insert;}}
}void preOrder(Tree *node, int layer) {if (node == NULL) {return;}for (int i = 0;i < layer; ++i) {cout << "----";}cout << node -> data << endl;preOrder(node -> left,layer + 1);preOrder(node -> right, layer + 1);
}bool search(Tree *node, int val) {if (node -> data == val) {return true;} if (node -> data > val) {if (node -> left) {return search(node -> left, val);} else {return false;}} else {if (node -> right) {return search(node -> right, val);} else {return false;}}
}int main(int argc, char const *argv[])
{Tree *node;TreeNode root;root = (Tree *)malloc(sizeof(tree));root -> data = 8;root -> left = NULL;root -> right = NULL;int n;int tmp;cin >> n;for (int i = 0;i < n; ++i) {node = (Tree *)malloc(sizeof(tree));cin >> tmp;node -> data = tmp;create_tree(&root, node);}cout << "preOrder" << endl;preOrder(root,0);string s = (search(root, 10)==1)?"success":"failed";cout << "\nsearch 10 in tree "<< s << endl;return 0;
}
輸出如下:
#輸入
5
3 1 19 2 9
#輸出
preOrder
8
----3
--------1
------------2
----19
--------9search 10 in tree failed#輸入
5
3 1 10 2 9
#輸出
preOrder
8
----3
--------1
------------2
----10
--------9search 10 in tree success
總結
以上是生活随笔為你收集整理的二叉树:二叉搜索树的创建和插入的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二分法:查找区间search for a
- 下一篇: qq网名2017最火