创建二叉树( 二叉排序树(Binary Sort Tree))

#include<stdio.h>
#include<stdlib.h>
/*
递归前中后遍历
*/
typedef struct node
{
  int data;
  struct node*left;
  struct node*right;
}BTnode;
BTnode*CreateTree(int a[],int n)
{
  BTnode*root,*c,*p,*pa;
  int i;
  root=(BTnode*)malloc(sizeof(BTnode));
  root->data=a[0];
  root->left=root->right=NULL;//建立根节点
  for(i=1;i<n;i++){
      p=(BTnode*)malloc(sizeof(BTnode));
      p->data=a[i];
      p->left=p->right=NULL;
      c=root;              //根节点给C指针
while(c){                //判断p结点时属于左子树还是右子树
  pa=c;                //pa指针是p结点的父节点
  if(c->data>p->data)
     c=c->left;
  else
     c=c->right;
}
if(pa->data>p->data)  //p结点时父节点的左孩子还是右孩子
   pa->left=p;
else
   pa->right=p;
  }
  return root;
}
void Forder(BTnode*root){
  if(root){
  printf("%d",root->data);
  printf("\n");
  Forder(root->left);
  Forder(root->right);
  }
}
void Inorder(BTnode*root){
  if(root){
  Inorder(root->left);
  printf("%3d",root->data);
  printf("\n");
  Inorder(root->right);
  }
}
void Porder(BTnode*root){
  if(root){
  Porder(root->left);
  Porder(root->right);
  printf("%6d",root->data);
  printf("\n");
 
  }
}

int main(void){ 
 BTnode*root;
 int *a;
 int n;
 int i;
 printf("请输入n=");
 scanf("%d",&n);
 a=(int*)malloc(n*sizeof(int));
 printf("请输入数组a[]=");
 for(i=0;i<n;i++)
   scanf("%d",&a[i]);
root=CreateTree(a,n); 
Forder(root);
Inorder(root);
Porder(root);
}

原文地址:http://blog.51cto.com/13645380/2155623

时间: 2024-10-15 16:51:58

创建二叉树( 二叉排序树(Binary Sort Tree))的相关文章

二叉排序树(Binary Sort Tree)

1.定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree).其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树: ①  若它的左子树非空,则左子树上所有结点的值均小于根结点的值: ②  若它的右子树非空,则右子树上所有结点的值均大于根结点的值: ③  左.右子树本身又各是一棵二叉排序树. 上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树. 注意: 当用线性表作为表的组织形式时,可以有三种查找法

二叉排序树(Binary Sort Tree)

二叉排序树(Binary Sort Tree)又称二叉查找树,是一种排序和查找都很有用的特殊二叉树.BST 满足 左节点的值<根节点的值<右节点的值.根据这个原理,我们可以推断:BST的中序遍历必定是严格递增的. 如图一棵二叉树,是一棵BST.我们可以明显看到他的中序遍历为09,17,23,45,53,60,70,75,78,88,94.(因为左<中<右) 下面是BST的实现,包括BST的插入,创建,删除,遍历 //BST.h #include<iostream> us

二叉查找树(Binary Sort Tree)(转)

二叉查找树(Binary Sort Tree) 我们之前所学到的列表,栈等都是一种线性的数据结构,今天我们将学习计算机中经常用到的一种非线性的数据结构--树(Tree),由于其存储的所有元素之间具有明显的层次特性,因此常被用来存储具有层级关系的数据,比如文件系统中的文件:也会被用来存储有序列表等. 在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根(root).每一个结点可以有多个后件,称为该结点的子结点.没有后件的结点称为叶子结点.一个结点所拥有

Binary Sort Tree(BST)

Basic structure typedef struct BstNode{ key_type key; struct node *lchild; struct node *rchild; struct node *parent; }Node Structure Feature If left_child is not NULL, left child is smaller than parant node, If right_child is not NULL, right child is

[Swift Weekly Contest 127]LeetCode1008. 先序遍历构造二叉树 | Construct Binary Search Tree from Preorder Traversal

Return the root node of a binary search tree that matches the given preorder traversal. (Recall that a binary search tree is a binary tree where for every node, any descendant of node.left has a value < node.val, and any descendant of node.right has

数据结构 -- 二叉树(Binary Search Tree)

一.简介 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树.这种树的特点是每一层上的结点数都是最大结点数.而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树.具有n个结点的完全二叉树的深度为floor(log2n)+1.深度

LeetCode 235. 二叉搜索树的最近公共祖先(Lowest Common Ancestor of a Binary Search Tree) 32

235. 二叉搜索树的最近公共祖先 235. Lowest Common Ancestor of a Binary Search Tree 题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个结点 x,满足 x 是 p.q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)." 例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,nul

二叉排序树BinarySortTree(二叉搜索树Binary Search Tree)

二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 定义: 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有键值相等的节点 步骤: 二叉树 若根结点的关键字值等于查找的关键字则成功. 否则,若小于根结点的关键字值,递归查左子树. 若大于根

【LeetCode-面试算法经典-Java实现】【109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)】

[109-Convert Sorted List to Binary Search Tree(排序链表转换成二叉排序树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 题目大意 给定一个升序的单链表.将它转换成一颗高度平衡的二叉树 解题思路 解法