有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树的根节点root,请返回所求距离。 解析:首先求出二叉树中所有从根节点到叶子节点的路径,存储在vector<vector<int>> allPath中。然后找到权值最大的叶子节点和权值最小的叶子节点所在的路径所在的路径的编号。该问题可以转换为两个节点到最低公共祖先的距离问题。#include<iostream> #include<vector> #include<algorithm> #include<stack> #include<queue> using namespace std; //树节点结构 struct TreeNode { TreeNode *left; TreeNode *right; int val; }; //创建二叉树 void createTree(TreeNode* &root) { int val; cin >> val; if (val != -1) { root = new TreeNode; root->val = val; root->left = NULL; root->right = NULL; createTree(root->left); createTree(root->right); } } class Tree { public: //求距离函数 int getDis(TreeNode* root) { getPath(root); int minIndex = 0;//叶子节点权值最小的路径编号 int maxInde
二叉树中权值最大的叶节点到权值最小的叶节点的距离
最新推荐文章于 2021-09-13 21:52:01 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)