#include #include using namespace std;
struct node
};void getnodepath(node* root, node* node, vector& v, bool& flag)
//用後根遍歷的方式尋找node,找到後儲存從該節點到根節點的路徑
}node* creattree()//初始化樹
int main()
i++;
j++;
} cout << res << endl;
cout << i + j;
cout << endl;
system("pause");
return 0;
}
#include #include using namespace std;
struct node
};node* creattree()//初始化樹
node* findfather(node* root, node* node1, node* node2, int& flag)
if (root->val == node2->val)//發現第二個節點
if (left == nullptr && right)//右子樹發現節點,左子樹未發現
return right;
if (right == nullptr && left)//左子樹發現節點,右子樹未發現
return left;
return nullptr;//左右子樹均未發現node1、node2
}int findpath(node* root, node* node, int &flag)
//從最低公共祖先出發尋找到達node的路徑長度
int left = findpath(root->left, node, flag);
int right = findpath(root->right, node, flag);
if (left >= 0)
return left + 1;
else if (right >= 0)
return right + 1;
else
return -1;//未找到返回-1
}int main()
求二叉樹中任意兩個結點的距離
實現步驟 計算跟到第乙個結點的距離 計算跟到第二個結點的距離 計算lca 計算跟到lca結點的距離 結果為 1 2 2 4 因為重複計算了兩次的從跟到lca結點的距離 class node object def init self value 0 self value value self left...
求二叉樹中任意兩結點的距離
與該題的一道相似題為 求二叉樹中結點的最長距離。兩題看似有聯絡,但是做法不同。分析 距離和深度之間存在必然聯絡。如果已知最長距離的兩結點的最低公共根節點r 那麼我們求r 的左右子樹深度相加即最長距離求出。如下圖所示 我們發現a和b是最長距離,他們的最低公共根節點為c,假如我們知道c的左右子樹高度均為...
求乙個二叉樹中任意兩個節點間的距離,
網易有道筆試 1 求乙個二叉樹中任意兩個節點間的距離,兩個節點的距離的定義是 這兩個節點間邊的個數,比如某個孩子節點和父節點間的距離是1,和相鄰兄弟節點間的距離是2,優化時間空間複雜度。c codes as below using system namespace node i2 new node ...