BST创建

思路:把数字排序,排序后数字列,中间点为父节点,左边部分为左子树,右边为右子树。

假设节点定义为:

// Definition for binary tree
struct TreeNode {
   int val;
   TreeNode *left;
   TreeNode *right;
   TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};

递归的思路实现:

TreeNode *makeArray2BST(int *a,int len)
{
    TreeNode *t;
    if(len == 0)
        return NULL;
    else if(len == 1)
    {
        t = new TreeNode(a[0]);
    }else if(len == 2){
        t = new TreeNode(a[1]);
        t->left = new TreeNode(a[0]);
    }else{
        int n = len/2;
        t = new TreeNode(a[n]);
        t->left = makeArray2BST(a,n);
        t->right = makeArray2BST(a+n+1,len-n-1);
    }
    return t;
}
时间: 2024-11-29 11:08:35

BST创建的相关文章

二叉排序树(BST):创建、查找、插入与删除

删除结点的相关操作(左右子树均为非空的删除结点的方法): 算法分析: 下面以实例来说明二叉排序树的创建.查找.插入和删除等相关操作: 如输入关键字序列(45,24,37,12,54,93),然后对其进行相应的操作,程序如下: #include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; typedef struct BiTNode { int value; struct B

树和二叉树总结(三)—BST二叉排序树

二叉排序树的特点:中序遍历是递增的… 下面复习几个常用的操作: 1.如何向BST中插入一个节点 思路:用递归做... 首先,判断head是否为空,为空就是需要插的地方: 然后,判断head的data是不是和新Node一样,一样就是重复Node,不加 最后,若比当前head.data小,则放到插到左节点的树你,否则就插到右节点 public static Node insertBST(Node root, Node keyNode) { if (root== null) { //如果遇到空的地方,

C语言实现二叉查找树(BST)的基本操作

我们在上一篇博客中讲解了二叉树,这一次我们来实现二叉树的进阶--二叉查找树(Binary Search Tree),又称二插排序树(Binary Sort Tree).所以简称为BST.二插查找树的定义如下: 1.若左子树不为空,则左子树上所有节点的值均小于它的根节点的值: 2.若右子树不为空,则右子树上所有节点的值均大于它的根节点的值: 3.左右子树也分别为二叉排序树: 二叉排序树的一个重要特点就是中序遍历是一个递增序列.示例代码上传至: https://github.com/chenyufe

二叉查找树(5) - 判断一棵二叉树是否为BST

在本系列的第一篇文章中,已经介绍过了二叉查找树的一些性质: 节点的左子树中任意节点值小于根节点 节点的右子树中任意节点值大于根节点 左右子树都必须是二叉查找树,不允许存在重复节点. 基于上面的这些性质,自然的就得到了这种判断方式:树中的每个节点都有一个特定的值. 假设树的节点定义为: struct Node { int key; Node *left; Node *right; }; 方法1 (实现简单,但却是错误的) 对于每个节点,检测它的左孩子节点是否小于它,且右孩子节点是否大于它. boo

BST 汇总

参考:http://blog.csdn.net/fightforyourdream/article/details/16843303 import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.Stack; /** * http://blog.csdn.net/l

Convert Sorted List to Balanced BST

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. Example 2 1->2->3 => / 1 3 分析:非常简单,用递归即可.但是如果list的size小于3,就直接创建tree.大于3才递归,否则递归会出错.并且,需要注意返回mid node的时候,要把整个list分成两半. 1 /** 2 * Definiti

小代码 向原文学习 BST 简单的C语言版本

   /********************************  运行环境:http://www.anycodes.cn/zh/  原文:http://blog.csdn.net/u014488381/article/details/41719765/  二叉排序树的查找算法的C代码实现  修改以直接测试  待C++类封装版本  *********************************/ #include <stdio.h> #include <stdlib.h>

创建二叉查找树的完整C代码

BST 基本概念 二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二查搜索书. 它或者是一棵空树:或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: 简单的说就是:左孩子<双亲结点<右孩子. 因此,对查找二叉树进行中序遍历,得到的是一个从小到大排序的数列. 创建BST的完整C代码 /* 创

二叉树与二叉排序树的创建

创建二叉树 #include <iostream> using namespace std; struct TreeNode { int val; TreeNode *left,*right; }; /*void preOrderTraverse(TreeNode *p) { if(p) { cout<<p->val<<" "; preOrderTraverse(p->left); preOrderTraverse(p->right