2014年408真题----二叉树求带权路径值

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

typedef int BiElemType;
typedef struct BiTNode {
    BiElemType data;
    struct BiTNode *lChild;
    struct BiTNode *rChild;//左右节点
} BiTNode, *BiTree;
//辅助队列
typedef struct tag {
    BiTree p;//树的某一个节点,指针类型,保存申请节点的指针
    struct tag *pnext;
} tag_t, *ptag_t;

//前序遍历,深度优先遍历
int wpl = 0;

void preOrder(BiTree p, int deep) {
    if (p) {
//        printf("%c", p->data);
        if (p->lChild == NULL && p->rChild == NULL) {//叶子节点
            wpl += (p->data) * deep;
        }
        deep++;
        preOrder(p->lChild, deep);
        //递归
        preOrder(p->rChild, deep);
    }
}

void inOrder(BiTree p) {
    if (p) {
        inOrder(p->lChild);
        printf("%c", p->data);
        //递归
        inOrder(p->rChild);
    }
}

void postOrder(BiTree p) {
    if (p) {
        postOrder(p->lChild);
        postOrder(p->rChild);
        printf("%c", p->data);
        //递归
    }
}

int WPL(BiTree tree) {
    preOrder(tree, 0);
    return wpl;
}

int main() {
    BiTree p;//指向新申请的树节点
    BiTree tree = NULL;//初始化根节点
    //队头,队尾,新节点,新节点父元素
    ptag_t phead = NULL, ptail = NULL, listpnew = NULL, pucr = NULL;
    char c;
    while (scanf("%c", &c)) {
        if (c == '\n') {
            break;;
        }
        p = (BiTree) calloc(1, sizeof(BiTNode));
        p->data = c;
        listpnew = (ptag_t) calloc(1, sizeof(tag_t));//给队列节点申请空间
        listpnew->p = p;
        if (tree == NULL) {
            tree = p;
            //第一个节点既是队列头也是队列尾
            phead = listpnew;
            ptail = listpnew;
            pucr = listpnew;
        } else {
            ptail->pnext = listpnew;
            ptail = listpnew;
            //将数放入左孩子
            if (pucr->p->lChild == NULL) {
                pucr->p->lChild = p;
            } else if (pucr->p->rChild == NULL) {
                pucr->p->rChild = p;
                pucr = pucr->pnext;
            }
        }
    }
    printf("%d",WPL(tree));
//    preOrder(tree);
//    inOrder(tree);
//    postOrder(tree);
    return 0;
}

相关推荐

  1. 蓝桥杯2019第十三届省赛-数列

    2024-01-20 20:50:02       46 阅读
  2. 蓝桥杯 完全

    2024-01-20 20:50:02       54 阅读
  3. 哈夫曼的构造和路径

    2024-01-20 20:50:02       33 阅读
  4. 完全-蓝桥183-

    2024-01-20 20:50:02       43 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-20 20:50:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-20 20:50:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-20 20:50:02       87 阅读
  4. Python语言-面向对象

    2024-01-20 20:50:02       96 阅读

热门阅读

  1. Day29- 贪心算法part03

    2024-01-20 20:50:02       69 阅读
  2. [EFI]ThinkPad-X13-Gen1电脑 Hackintosh 黑苹果efi引导文件

    2024-01-20 20:50:02       63 阅读
  3. SpringBoot多环境配置及日志记录器

    2024-01-20 20:50:02       68 阅读
  4. C++:运算符重载

    2024-01-20 20:50:02       58 阅读
  5. 5.C++静态成员

    2024-01-20 20:50:02       58 阅读
  6. ansible playbook 恢复备份文件

    2024-01-20 20:50:02       61 阅读
  7. ansible

    ansible

    2024-01-20 20:50:02      62 阅读
  8. cout << “if (customers > 0)

    2024-01-20 20:50:02       54 阅读
  9. Linux 修改文件名称

    2024-01-20 20:50:02       68 阅读