一、问题描述
二叉树两节点距离是指从一个节点到达另一个节点需要的最少边数。如图:
二、问题求解
假设root是二叉树的根节点;n1和n2是给定二叉树的两个节点的数值。
lca是n1和n2的最小公共祖先;Dist(n1, n2)为n1和n2之间的距离。
因此,两节点距离的计算公式为:
Dist(n1, n2) = Dist(root, n1) + Dist(root, n2) - 2*Dist(root, lca)
三、代码
时间复杂度: O(n)
#include<iostream>
using namespace std;
typedef int KeyType;
typedef struct BinaryTreeNode
{
KeyType key;
struct BinaryTreeNode *left;
struct BinaryTreeNode *right;
}BTNode, *BiTree;
//创建二叉树节点
BTNode *CreateBTNode(KeyType key)
{
BTNode *node = new BTNode;
node->key = key;
node->left = node->right = NULL;
return node;
}
//对于给定的树中两节点n1和n2,返回两者lca的指针
BTNode *findLCA(BTNode *root, KeyType n1, KeyType n2)
{
if(root