二叉樹中最遠的兩個結點的距離
解法一:求出每個結點作為根結點時的最遠距離(時間複雜度太高)
struct BinTreeNode
{
int _data;
BinTreeNode* _left;
BinTreeNode* _right;
BinTreeNode(int data = 0) :_data(data), _left(NULL), _right(NULL)
{}
};
int DepthBin(BinTreeNode* root)
{
if (root == NULL)
return 0;
int left = DepthBin(root->_left);
int right = DepthBin(root->_right);
return left > right ? left + 1 : right + 1;
}
void FindMaxLenOfBinTree(BinTreeNode* root, int& maxPath)
{
if (root == NULL)
return;
int leftDepth = DepthBin(root->_left);
int rightDepth = DepthBin(root->_right);
if (maxPath < leftDepth + rightDepth)
{
maxPath = leftDepth + rightDepth;
}
FarestRoot(root->_left, maxPath);
FarestRoot(root->_right, maxPath);
}
int FindMaxLen(BinTreeNode* root)
{
int maxPath = 0;
FarestRoot(root, maxPath);
return maxPath;
}
解法二:程式碼註釋很詳細
struct BinTreeNode
{
int _data;
int _maxLeft;
int _maxRight;
BinTreeNode* _left;
BinTreeNode* _right;
BinTreeNode(int data = 0)
:_data(data), _maxLeft(0), _maxRight(0)
,_left(NULL), _right(NULL)
{}
};
void FindMaxLenOfBinTree(BinTreeNode* root, int& maxLen)
{
if (root == NULL)
return;
//左子樹為空,該節點的左邊最長距離為0
if (root->_left == NULL)
{
root->_maxLeft = 0;
}
//右子樹為空,該節點的右邊最長距離為0
if (root->_right == NULL)
{
root->_maxRight = 0;
}
if (root->_left != NULL)
{
FindMaxLenOfBinTree(root->_left, maxLen);
}
if (root->_right != NULL)
{
FindMaxLenOfBinTree(root->_right, maxLen);
}
if (root->_left != NULL)
{
int tmp = 0;
if (root->_left->_maxLeft > root->_left->_maxRight)
{
tmp = root->_left->_maxLeft;
}
else
{
tmp = root->_left->_maxRight;
}
root->_maxLeft = tmp + 1;
}
if (root->_right != NULL)
{
int tmp = 0;
if (root->_right->_maxLeft > root->_right->_maxRight)
{
tmp = root->_right->_maxLeft;
}
else
{
tmp = root->_right->_maxRight;
}
root->_maxRight = tmp + 1;
}
if (root->_maxLeft + root->_maxRight > maxLen)
{
maxLen = root->_maxLeft + root->_maxRight;
}
}
int FindMaxLen(BinTreeNode* root)
{
int maxLen = 0;
FindMaxLenOfBinTree(root, maxLen);
return maxLen;
}
相關文章
- 二叉樹中相距最遠的兩個節點之間的距離二叉樹
- 求二叉樹的給定兩個結點之間的距離二叉樹
- Java二叉樹排序及任意兩點個節點間的最大距離Java二叉樹排序
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- 二叉樹:距離最近的共同祖先二叉樹
- 二叉樹兩個節點的公共節點二叉樹
- 二叉樹最大距離(直徑)二叉樹
- sql 計算兩個經緯度點之間的距離SQL
- 二叉樹中兩個節點的最低公共祖先二叉樹
- 常見問題01:計算地球上兩個點的距離
- 面試8:找二叉樹的下個結點面試二叉樹
- 計算地圖中兩點之間的距離地圖
- 《劍指offer》:[58]二叉樹的下一個結點二叉樹
- C語言:使用函式計算兩點間的距離C語言函式
- 求兩向量距離的CUDA實現
- 利用空間資料庫求兩點距離資料庫
- 根據經緯度計算兩點之間的距離的公式公式
- 【谷歌面試題】求陣列中兩個元素的最小距離谷歌面試題陣列
- 演算法題(三十五):二叉樹的下一個結點演算法二叉樹
- JZ-062-二叉查詢樹的第 K 個結點
- 交換二叉樹中每個結點的左孩子和右孩子二叉樹
- 008,二叉樹的下一個節點二叉樹
- 快速求完全二叉樹的節點個數二叉樹
- JAVA計算兩經緯度間的距離Java
- 定義Point類,採用友元類的方式計算兩個點之間的水平和垂直距離
- 一個新媒體運營與web前端的距離有多遠?Web前端
- Php兩點地理座標距離的計算方法和具體程式碼PHP
- 遞迴求解二叉樹任意一結點的深度遞迴二叉樹
- 二叉樹的知識點二叉樹
- 你與小程式開發的距離有多遠?
- 程式碼隨想錄——二叉樹-11.完全二叉樹的節點個數二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- JavaScript 元素距離視窗頂部的距離JavaScript
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- 二叉樹的子結構二叉樹
- LeetCode 834 樹中距離之和LeetCode
- (python版)《劍指Offer》JZ57:二叉樹的下一個結點Python二叉樹
- 原生JS獲取DOM 節點到瀏覽器頂部的距離或者左側的距離JS瀏覽器