首页 > 其他分享 >2008秋-计算机软件基础-第三章- 二叉排序树

2008秋-计算机软件基础-第三章- 二叉排序树

时间:2023-11-08 10:03:27浏览次数:45  
标签:node NULL 计算机软件 struct 二叉 2008 排序 节点

/*---------------------------------------------------------

 Title: 二叉排序树(Binary Sorting Tree) 

 请先阅读教材 91-93,96-99页, 3.2.3, 3.2.7节, 

 (注意以下程序为简化后的,仅供入门学习之用)

----------------------------------------------------------*/

#include<stdio.h>

#include<stdlib.h>

//定义二叉树的节点结构
struct  node  

{ 

    int data;//存放节点数据
    struct node  * lchild,* rchild;//指向左子树和右子树的指针变量
};

//中序遍历二叉树
void  MiddleOrder (struct node *q)

{ 

  if (q!=NULL) 

     { 

        MiddleOrder(q->lchild); /*中序遍历左子树*/

        printf("%d ",q->data);  /*访问根结点*/

        MiddleOrder(q->rchild); /*中序遍历右子树*/

      } 

}       

//二叉排序树中插入节点
void InsertNode(struct node *p,struct node * pn) /*插入一个新结点的算法*/

{

  if(pn->data<p->data)//小于根节点
   {  

       if (p->lchild==NULL)//左子树为空
           p->lchild=pn;

       else 

           InsertNode(p->lchild,pn);

   }

  else               //大于或等于根节点
   {  

      if (p->rchild==NULL) //右子树为空
           p->rchild=pn;

      else 

           InsertNode(p->rchild,pn);

    }

}

//二叉排序树的生成算法
struct node * CreateBinSortTree() 

{  

   int x;//用于暂时存放输入的数值
   struct node *t;//指向根节点的指针变量
   struct node *s;//指向新插入节点的指针变量
   t=NULL;//最初为空树
   printf("请输入结点的值(整数,用空格隔开),当输入-1时结束.\n");

   scanf("%d",&x);

   while(x!=-1)

    {  

    s=(struct node *)malloc(sizeof(struct node));

        s->data=x;

        s->lchild=s->rchild=NULL;

        if (t==NULL)

           t=s;

        else

            InsertNode(t,s);

        scanf("%d",&x);

     }

  return (t);

}

void main()

{

  struct node * root;//定义指向根节点的指针变量
  printf("创建二叉排序树:\n");

  root= CreateBinSortTree();//创建二叉排序树
  printf("遍历二叉排序树:\n");

  MiddleOrder(root);//遍历二叉排序树
  printf("\n");

}

标签:node,NULL,计算机软件,struct,二叉,2008,排序,节点
From: https://blog.51cto.com/emanlee/8245249

相关文章

  • 全局平衡二叉树
    一种常数较小的能在单次\(O(\logn)\)时间内解决链修改链查询的数据结构。普通的LCT也是\(O(\logn)\)的,但是常数巨大。原因是它用辅助树维护了一个动态的虚实链剖分,在没有动态加边删边的问题中这显然是没有必要的。我们考虑将LCT强行静态化来减小长度。具体的,我们仍用......
  • 线索二叉树(Morris Traversal)
    在前面的文章中总结了二叉树的一些操作,提供了二叉树前中后的递归和非递归的实现。在非递归的实现中,基本思想是利用栈来模拟递归调用遍历的过程,本质上和递归实现没有区别,空间复杂度为\(O(n)\)。是否存在一种算法,它不使用栈也不破坏二叉树结构,但是可以完成对二叉树的遍历?即:空间复......
  • Visual Studio 2008安装ASP.NET MVC 2 RTM
    1首先,要安装VisualStudio2008SP1,下载地址http://www.microsoft.com/en-us/download/details.aspx?id=109862下载ASP.NETMVC2RTM(英文版,2.5M,AspNetMVC2_VS2008.exe)下载地址http://www.microsoft.com/en-us/download/details.aspx?id=220793双击AspNetMVC2_VS2008.e......
  • LeetCode222.完全二叉树的节点个数
    题目描述给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层,则该层包含1~2h个节点。示例提交的代......
  • 二叉查找树的实现C/C++
    二叉查找树是一种关键字有序存放的二叉树。在不含重复关键字的二叉查找树中,关键字"较小"的节点一定在关键字“较大”的节点的左子树中,“较小”一般可以由内值类型的<运算符来实现,或由重载了<运算符的类类型的<运算符来实现。“较小”的概念可以根据我们的需要有不同的实现。本文实......
  • 二叉树理论基础
    二叉树理论基础二叉树的种类满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树二叉树的存储方式顺序存储、链式存储二叉树的遍历方式二叉树主要有两种遍历方式:深度优先遍历:先往深走,遇到叶子节点再往回走。广度优先遍历:一层一层的去遍历。那么从深度优先遍历和广度优先......
  • 01_二叉树的递归遍历
    二叉树的递归遍历递归算法的三要素确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终......
  • 108. 将有序数组转换为二叉搜索树
    目录题目题解题目给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过1」的二叉树。题解题目给出的“有序数列”帮助我们满足了“二叉搜索树”的条件......
  • 102. 二叉树的层序遍历(中)
    目录题目法一、BFS法二、DFS题目给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]示例2:输入:root=[1]输出:[[1]]示例3:输入:root=[]输出:[]法一、BFS......
  • LeetCode101.对称二叉树
    题目描述给你一个二叉树的根节点root,检查它是否轴对称。示例提条的代码importjava.util.List;importjava.util.ArrayList;importjava.util.Deque;importjava.util.LinkedList;importjava.util.Collections;classSolution{publicbooleanisSymmetric(Tr......