/*求二叉树中的两个节点的最大距离
每个节点的解max(左子树的最大距离、右子树的最大距离、左子树高度+右子树高度+1)
*/
class MaxDistace {
public:
/*用于保存每个子树的最大距离以及高度*/
typedef struct RetVal {
int distance;
int height;
RetVal(int dis,int hei):distance(dis),height(hei){}
};
static int Do(TreeNode* root)
{
if (root == nullptr) return 0;
return dfs(root).distance;
}
private:
static RetVal dfs(TreeNode* root)
{
if (root == nullptr)
{
return RetVal(0, 0);
}
RetVal left = dfs(root->left);
RetVal right = dfs(root->right);
int height = max(left.height, right.height)+1;
int maxheight = left.height + right.height + 1;
int distace = max(left.distance, right.distance);
return RetVal(max(distace, maxheight), height);
}
};
void main()
{
TreeNode* node1 = new TreeNode(1);
TreeNode* node2 = new TreeNode(2);
TreeNode* node3 = new TreeNode(3);
TreeNode* node4 = new TreeNode(4);
TreeNode* node5 = new TreeNode(5);
TreeNode* node6 = new TreeNode(6);
TreeNode* node7 = new TreeNode(7);
node1->Connect(node2, node3);
node2->Connect(node4, node5);
node3->Connect(node6, node7);
cout << "maxDistance:" << MaxDistace::Do(node1)<< endl;
system("pause");
}
求二叉树中的最大距离-后续递归实现 C++
最新推荐文章于 2024-10-09 10:07:13 发布