二叉树的链表实现

本文介绍了如何使用链表实现完全二叉树,并详细阐述了利用队列结构进行二叉树的打印方法,通过调整入队顺序来控制遍历顺序。同时,提到了树的结构定义和完整的实现代码。
摘要由CSDN通过智能技术生成

二叉树的链表实现

在构建二叉树时使用完全二叉树的特性,所以构建的是一颗完全二叉树

打印二叉树

打印完全二叉树要使用队列结构保存序列。将根节点存入队列,然后在while循环中将队列的第一个元素出队并将其右孩子和左孩子依次入队(如果不为null),这样的入队的顺序就按层按从左到右的顺序,出队亦是。所以可以通过调整入队顺序改变遍历顺序.以此循环遍历root及其子树,循环的条件是队列不为null.

//print tree
void printTree(treeLink *root){
    int height = getHeight(root);//树的高度,层数

    int count = 0,length = 1;//换行计数

    int k;//元素间距

    treeLink *node;//遍历树的指针

    treeList *head = newTreeList();//空顺序表

    addTree(head,root);//将root(根)入队

    //k 的值用于控制tree node 间距,当从root节点向下打印时, k是递减的,k的递减规律是: n = (n+1) - 2^n ;(n 是当前层数,n-1表示上一层,root的层数n = 数的高度,n从叶子(最末端)向根节点计数.  (2^n == 1<<n)
    k = (1 << (height+1)) - 1;
    k = k - (1 << height);

    if(root == NULL){
        return;//如果是空树直接返回
    }

    while((node = getTree(head)) != NULL){

        printCH2(k);//打印空格方法
        printf("%d",node->data);//打印元素,每个元素前后要打印空格.
        printCH2(k);

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值