数据结构之模块二:非线性结构-树结构

一,树的定义

专业定义:

  • 有且只有一个成为根的结点

  • 有若干个互不相交的子树;这些树本身也是一棵树。

通俗定义:

  • 树是有结点和边构成

  • 每个结点只有一个父结点,但可以有多个子结点

  • 根结点无父结点

二,一些专业术语

这里写图片描述
结点的度:结点拥有的子树数称为结点的度。

叶子结点(终结结点):度为0的结点称为叶子结点或终结结点。

非叶子结点(非终结结点):度不为0的结点。

树的度:树上结点的度的最大值。

双亲、孩子:结点子树的根结点叫做该结点的孩子结点,其为孩子结点的双亲。

兄弟:同一双亲的孩子之间互为兄弟。

祖先:从根到该节点所经分支上的所有结点,都称为该结点的祖先。

子孙:任意树上的结点都为数的根结点的子孙。

层次:树的根为第一层,根的孩子在第二层,依次类推。

堂兄弟:双亲在同一层的节点互为堂兄弟。

深度或高度:树中结点的最大层次称为树的深度或高度。

有序树:树上各结点的子树从左到右若有次序,则成为有序树。否则为无序树。

树的分类:
  • 一般树:任意结点的子结点数不受限制。

  • 二叉树:任意结点的子结点数不超过两个且子结点的位置不可更改。又可分为:

                   - 一般二叉树

                    - 满二叉树
                         
                    - 完全二叉树:只删除满二叉树最底层最右边的连续若干个结点。
                    
    森林: N个互不相交的树。

三,二叉树的算法实现

头文件

#include<stdio.h>
#include<stdlib.h>

结点结构体构造类型

tyedef struct node
{
  struct node *left;
  struct node *right;
  int data;
}Node;

根节点结构体构造类型

typedef struct tree
{
  Node *root;
  char flag;
}Tree;

初始化根结点

Tree *Init_tree(Tree *ptr)
{
  ptr->root=NULL;
  ptr->flag='#';
}

创建新节点

Node *Create_tree(Node *pnode)
{
  char temp;
  printf("input node:\n");
  scanf("%c",&temp);
  if('#'==temp)
      return NULL;
  else
  {
      pnode=(Node *)malloc(sizeof(Node));
      pnode->data=temp;
      pnode->left=Create_tree(pnode->left);
      pnode->right=Create_tree(pnode->right);
  }
}

打印结点的值

void Print_tree(Node *ptr)
{
  if(NULL==ptr)
    printf(" ");
  else
  {
    printf("%c",ptr->data);
    Print_tree(ptr->left);
    Print_tree(ptr->right);
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值