数据结构(6)

一、二叉树

树:n(n>=0)个结点的有限集合,n = 0时为空树。由一个根结点衍生出两个子节点,二者互不相交,这种称之为二叉树。左边的为左子树,右边的为右子树。

特点:

(1)每个节点最多两个子树;

(2)左子树和右子树是有顺序的,次序不能颠倒;

(3)如果某节点只有一个子树,也要分左树和右数。

特殊的二叉树:

(1)斜树:所有结点都只有左节点,叫做左斜树,反之,叫做右斜树;

(2)满二叉树:除了叶子结点外,所有分支都有左右子树,并且所有子树都在同一层。

(3)完全二叉树:对于一颗有n个结点的二叉树按层序编号,如果编号i(1<=i<n)的结点于同样深度的满二叉树中编号为i的结点在二叉树中的位置完全相同。满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树(除非最后一层也被填满)。

特性:第 k 层(k≥1)最多有 2k−1 个节点。若二叉树有 n个节点,则其最小深度为 ⌈log 2 (n+1)(此时为满二叉树或完全二叉树)。

排序:在数据结构中共有三种排序方式,他们分别是:前序、中序和后序。

 

 

上图树中的三种排序顺序为:

前序(根左右):ABDGHCEIF

中序(左根右):GDHBAEICF

后序(左右根):GHDBIEFCA

 

二叉树的行为:

1.创建

typedef char DATATYPE;

typedef struct BiTNode
{
    DATATYPE data;
    struct BiTNode *lchild, *rchild;
}BiTNode;

2.遍历

//根左右
void PreOrderTraverse(BiTNode *root)
{
    if(NULL == root)
    {
        return ;
    }
    else
    {
        printf("%c", root->data);
        PreOrderTraverse(root->lchild);
        PreOrderTraverse(root->rchild);
    }
    return ;
}


//左根右
void InOrderTraverse(BiTNode *root)
{
    if(NULL == root)
    {
        return ;
    }
    else
    {
        InOrderTraverse(root->lchild);
        printf("%c",root->data);
        InOrderTraverse(root->rchild);
        
    }
    return ;
}



//左右根
void PostOrderTraverse(BiTNode *root)
{
    if(NULL == root)
    {
        return ;
    }
    else
    {
        PostOrderTraverse(root->lchild);
        PostOrderTraverse(root->rchild);
        printf("%c", root->data);
    }
    return ;
}

3.行遍历

char data[] = "ABD#G###CE#h##FI###" ;
int ind = 0;
void CreateTree(BiTNode **root)
{
    char c = data[ind++];
    if('#' == c)
    {
        *root = NULL;
        return ;
    }
    else
    {
        *root = malloc(sizeof(BiTNode));
        if(NULL == *root)
        {
            printf("malloc error!\n");
            return ;
        }
        (*root)->data = c;
        CreateTree(&(*root)->lchild);
        CreateTree(&(*root)->rchild);
    }
    return ;
}

二、gdb

        GDB(GNU Debugger)是一款功能强大的命令行调试工具,主要用于调试 C、C++ 等编译型语言的程序,支持断点设置、变量查看、内存检查、程序单步执行等功能。

指令:

        一般指令:

1.gcc -g 1.c 打开调试选项(-g)

2.gdb  a.out运行gdb

3.b  fun.c  :36  设置断点在第36行(运行到35行)

4.r  运行

5.n 运行下一行

6.使用p命令,查看变量或指针

7.bt  查看栈结构

        其他指令:

1.n 步过,如果是函数直接调用结束;

2.s 步入,如果是函数,进入函数;

3.display:与p类似,在运行过程中一直显示变量的值,display a;

4.c continue用于跳出循环;

5.return 返回调用处;

6.set  print  elements  300  设置显示字符串长度。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值