二叉树节点的结构体定义如下:
struct BTreeNode
{
ElemType elem; // 当前节点元素
BTreeNode *left; // 左孩子结点
BTreeNode *right; // 右孩子节点
int maxLeft; // 左子树中的最大距离
int maxRight; // 右子树中的最大距离
};
使用递归的方式,遍历二叉树,然后从叶子节点开始修改结构体中的 maxLeft 和 maxRight 变量,直至回溯到根节点。
详细的代码如下:
#include <iostream>
using namespace std;
// 将节点保存的数据类型设为整型
typedef int ElemType;
struct BTreeNode
{
ElemType elem; // 当前节点元素
BTreeNode *left; // 左孩子结点
BTreeNode *right; // 右孩子节点
int maxLeft; // 左子树中的最大距离
int maxRight; // 右子树中的最大距离
};
// 往二叉树中插入节点,该方法实际上最后生成的是二叉查找树
void InsertBTree(BTreeNode **root, ElemType elem)
{
// 如果树为空,则创建
if (*root == NULL)
{
*root = new BTreeNode;
(*root)->elem = elem;
(*root)->left = NULL;
(*root)->right = NULL;
(*root)->maxLeft = 0;
(*root)->maxRight