二叉树创建,遍历,创建遍历指针小套路

可能很多人都为二叉树的创建,遍历的三种顺序而烦恼,这里说一说个人的小套路以助你理解。
首先来看创建:

void CreateBTree(BTreeLink *&B)
{
    char ch = getchar();
    if (ch == ' ')
    {
        B = NULL; //表示为空指针域
    }
    else
    {
        B = (BTreeLink *)malloc(sizeof(BTreeLink));
        printf("address is %d\n",B);
        B->next = NULL;
        B->data = ch;
        CreateBTree(B->LChild);
        CreateBTree(B->RChild);
    }

}

这里一看就是先序创建的,为什么呢?因为B->data = ch;在创建左右树之前。
在看一下遍历:

void InorderTraversalBTree(BTreeLink *B)
{
    if (B != NULL)
    {
        InorderTraversalBTree(B->LChild);
        printf("%c ", B->data);
        InorderTraversalBTree(B->RChild);
    }
}

这里一看就是中序遍历,因为输出在遍历左右树之间。
从上可以隐隐感受到某操作在递归之上就是先序,在递归之间就是中序,在递归之后就是后序,这点可以很好的帮助以后解决相关问题。
比如在节点中新加一个指针,指向后序遍历时,这个节点的后一个。
这里一看到后序,第一感受就是这个操作在递归之后,确实如此。
代码如下:

void CreateBehindNext(Node * node){
    if (node){
        CreateBehindNext(node->LChild);
        CreateBehindNext(node->RChild);
        if (pre){
            pre->next = node;
            printf("create next pre is %d this is %d\n", pre, node);
        }
        pre = node;
    }
}

如有错误还请提出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值