数据结构 - 求二叉树中结点的最大距离(C++)
Posted phlsheji
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 - 求二叉树中结点的最大距离(C++)相关的知识,希望对你有一定的参考价值。
// ------BTreeMaxNodeLength.cpp------ #include <iostream> using namespace std; template <class T> struct BTNode { // 左孩子 BTNode<T> *lChild; // 右孩子 BTNode<T> *rChild; // 该结点的值 T data; // 左子树最长距离 int leftSubTreeMaxLength; // 右子树最长距离 int rightSubTreeMaxLength; }; template <class T> class BinaryTree { public: void GetMaxNodeLength(BTNode<T> * root, int *maxNodeLength) { // 遍历到叶子结点,返回 if (root == NULL) { return; } // 假设左子树为空,那么该结点左子树最长距离为0 if (root->lChild == NULL) { root->leftSubTreeMaxLength = 0; } // 假设右子树为空,那么该结点右子树最长距离为0 if (root->rChild == NULL) { root->rightSubTreeMaxLength = 0; } // 假设左子树不为空,递归查找左子树最长距离 if (root->lChild != NULL) { GetMaxNodeLength(root->lChild, maxNodeLength); } // 假设右子树不为空,递归查找右子树最长距离 if (root->rChild != NULL) { GetMaxNodeLength(root->rChild, maxNodeLength); } // 计算左子树中距离根结点的最长距离 if (root->lChild != NULL) { if (root->lChild->leftSubTreeMaxLength > root->lChild->rightSubTreeMaxLength) { root->leftSubTreeMaxLength = root->lChild->leftSubTreeMaxLength + 1; } else { root->leftSubTreeMaxLength = root->lChild->rightSubTreeMaxLength + 1; } } // 计算右子树中距离根结点的最长距离 if (root->rChild != NULL) { if (root->rChild->leftSubTreeMaxLength > root->rChild->rightSubTreeMaxLength) { root->rightSubTreeMaxLength = root->rChild->leftSubTreeMaxLength + 1; } else { root->rightSubTreeMaxLength = root->rChild->rightSubTreeMaxLength + 1; } } // 更新最长距离 if (root->leftSubTreeMaxLength + root->rightSubTreeMaxLength > *maxNodeLength) { *maxNodeLength = root->leftSubTreeMaxLength + root->rightSubTreeMaxLength; } } };
以上是关于数据结构 - 求二叉树中结点的最大距离(C++)的主要内容,如果未能解决你的问题,请参考以下文章