《数据结构》严蔚敏版习题6.55
为二叉链表的结点增加DescNum域,表示该结点的子孙数量。编写一个算法,求二叉树的每个结点的子孙数目并存入其DescNum域。
思路:
- 方案1,利用递归,从根节点开始对每个结点都调用一次函数来求每个节点的子孙数量
很明显递归调用肯定很慢,因为要不断地压栈弹栈。 - 方案2,与方案1的遍历方向相反,从最下面的叶子结点开始计算每个结点的子孙数量,然后对于其双亲节点,只要将左右孩子的DescNum域加起来就可以了。那么哪种遍历可以满足这种“先孩子后双亲”的遍历顺序呢?当然是后续遍历。下面给出方案2的c++代码
/*
求每个结点的子孙数目
*/
#include "bitree.h"
typedef struct myTNode
{
int data;
int descendant;
struct myTNode* lchild;
struct myTNode* rchild;
}myBiTree, *pmy