标签:alt ring 二叉树 思维 调试 遍历 算法 git 9.png
学了这么久的树,觉得树是一个很神奇也很复杂的东西,光是构造就有很多种,再加上各种遍历,对我来说是一道需要攻破的难关,首先呢要充分的学习递归的调用,递归熟了,树就攻下了大半了,其中树的一些复杂的构造,如:哈夫曼树的构造,线索二叉树的构造等,都需要借助课本来完成,自己还没有很明确的思路,并交集也不怎么明白。
定义变量str和BT,输入str
利用函数BTree CreateBTree( string str , int n )构造树
定义树的指针BT
判断树是否空,如果str[1]==‘#‘代表根结点不存在,返回NULL,若输入的根结点位置不符合也返回NULL
给BT一个空间,new BTree;赋值;
利用孩子节点和双亲节点的下标位置关系(若双亲节点下标为i,则左孩子的下标为2i,右孩子下标为2i+1)递归构造树;
返回根结点指针
利用函数void Sum(BTree BT,int h)计算叶子节点的带权路径长度和
用类似遍历树的方法(先序、中序、后序)都行,并利用递归计算高度h
判断是否为叶子节点(左右孩子都为NULL)该叶子节点的权值为data*高度h;
用全局变量sum记录下总和
这篇代码是构建哈夫曼树的代码,书本上写的是利用ht数组来记录节点的孩子和双亲,而这篇代码直接构造了一棵链式储存的哈夫曼树,对于7-7的修理牧场来说,只需先构建一个哈夫曼树,在把不是叶子节点的节点data加起来就是题目的答案,思路简单,但是构建哈夫曼的代码对我来说只能借鉴,无法自己打出来。地址:https://blog.csdn.net/move_now/article/details/53398753.
标签:alt ring 二叉树 思维 调试 遍历 算法 git 9.png
原文地址:https://www.cnblogs.com/bigll666/p/8994606.html