二叉樹:距離最近的共同祖先
問題描述 :
-
目的:使用C++模板設計二叉樹的抽象資料型別(ADT)。並在此基礎上,使用二叉樹ADT的基本操作,設計並實現簡單應用的演算法設計。
-
內容:(1)請參照連結串列的ADT模板,設計二叉樹的抽象資料型別。(由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在一個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材、課件,以及網盤中的連結串列ADT原型檔案,自行設計二叉樹的ADT。)
-
注意:二叉樹ADT的基本操作的演算法設計很多要用到遞迴的程式設計方法。
-
(2)ADT的簡單應用:使用該ADT設計並實現若干應用二叉樹的演算法設計。
-
應用:要求設計一個演算法,查詢距離二叉樹中2個結點最近的共同祖先。二叉樹的儲存結構的建立參見二叉樹應用1。
-
注意:x、y都是屬於該二叉樹的結點。
參考函式原型:
//查詢距離二叉樹中2個結點最近的共同祖先 (使用者函式)
template<class ElemType>
BinaryTreeNode<ElemType> * FindNearAncient( BinaryTree<ElemType> &T, ElemType &x, ElemType &y );
輔助函式:
//查詢從根結點到元素值為x的結點的路徑 (成員函式,參見基本操作18)
template<class ElemType> //Q為存放路徑的順序佇列
void BinaryTree<ElemType>::FindPath( ElemType &x, SqQueue<BinaryTreeNode<ElemType> *> &Q );
輸入說明 :
第一行:表示無孩子或指標為空的特殊分隔符
第二行:二叉樹的先序序列(結點元素之間以空格分隔)
第三行:元素值x
第四行:元素值y
輸出說明 :
第一行:元素值(共同祖先)
如x、y中有根結點,則輸出NULL
輸入範例 :
#
A B # C D # # E # # F # G # H # #
B
D
輸出範例 :
A
思路分析
- 將問題轉換為找兩個字串的公共子串的最後一個元素
實現偽碼
BinaryTreeNode * FindNearAncient( BinaryTree T
, ElemType x, ElemType y ){
//樹為空,就退出
if(T.BinaryTreeisEmpty()) return NULL;
//建造兩個佇列用來儲存二者的路徑
SqQueue<BinaryTreeNode*> xQueue,yQueue;
//生成二者的路徑的
T.FindPath(x,xQueue);
T.FindPath(y,yQueue);
//遍歷兩個佇列,找對最後一個公共字首
BinaryTreeNode *xNode,*yNode;
xQueue.deQueue(xNode);
yQueue.deQueue(yNode);
//遍歷兩個佇列
while(xNode->getData() != yNode->getData()){
//首先佇列不是等長的,長的先出
if(xQueue.getQueueNums() > yQueue.getQueueNums()){
xQueue.deQueue(xNode);
}
else if(xQueue.getQueueNums() < yQueue.getQueueNums()){
yQueue.deQueue(yNode);
}else{
xQueue.deQueue(xNode);
yQueue.deQueue(yNode);
}
}
//裡面還有一個節點可以出隊
if(xQueue.getQueueNums() >= 1)
{
xQueue.deQueue(xNode);
return xNode;
}else{
return NULL;
}
}
事故現場
第一次提交
- 我試了很多,但離奇的是,居然都通過了,所以,毫不猶豫地買了樣例
- 半截題目沒有看清,行吧,認了。
分析總結
- 題目沒有申請,所以,還剩很多,用盡洪荒之力,接著寫吧
如果不妥,請在評論區留言,或者加我的扣扣一起討論學習,651378276
相關文章
- 二叉樹的最近公共祖先二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- # 劍指 Offer 68 - II. 二叉樹的最近公共祖先二叉樹
- 二叉樹最大距離(直徑)二叉樹
- leetcode 235. 二叉搜尋樹的最近公共祖先LeetCode
- 二叉樹中最遠的兩個結點的距離二叉樹
- (117)235. 二叉搜尋樹的最近公共祖先(leetcode)LeetCode
- 【leetcode 簡單】 第六十八題 二叉搜尋樹的最近公共祖先LeetCode
- 求二叉樹的給定兩個結點之間的距離二叉樹
- 二叉樹中相距最遠的兩個節點之間的距離二叉樹
- 二叉樹中兩個節點的最低公共祖先二叉樹
- Java二叉樹排序及任意兩點個節點間的最大距離Java二叉樹排序
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- lc235.二叉搜尋樹的最近公共祖先【①分別得到祖先序列,然後比較;②***同時查詢,找出分岔結點】
- Google S2 中的四叉樹求 LCA 最近公共祖先Go
- POJ 1330 LCA最近公共祖先 離線tarjan演算法演算法
- LeetCode——最近公共祖先LeetCode
- 236、二叉樹的最近公共祖先 | 演算法(leetcode,附思維導圖 + 全部解法)300題二叉樹演算法LeetCode
- LeetCode 834 樹中距離之和LeetCode
- Git 中的演算法-最近公共祖先Git演算法
- LCA最近公共祖先 線上演算法和離線演算法 模板演算法
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- leetcode-834. 樹中距離之和LeetCode
- LeetCode 236. 二叉樹的最近公共祖先 極限效能演算法 比LeetCode 99%還快50倍LeetCode二叉樹演算法
- JavaScript 元素距離視窗頂部的距離JavaScript
- 程式碼隨想錄演算法訓練營day22 | leetcode 235. 二叉搜尋樹的最近公共祖先、701. 二叉搜尋樹中的插入操作、450. 刪除二叉搜尋樹中的節點演算法LeetCode
- 「學習筆記」tarjan 求最近公共祖先筆記
- JavaScript獲取元素距離文件頂部的距離JavaScript
- 22天【程式碼隨想錄演算法訓練營34期】第六章 二叉樹part08 (● 235. 二叉搜尋樹的最近公共祖先 ● 701.二叉搜尋樹中的插入操作 ● 450.刪除二叉搜尋樹中的節點)演算法二叉樹
- javascript獲取元素距離網頁頂部的距離JavaScript網頁
- 曼哈頓距離與切比雪夫距離的互化
- 【Codeforces Round 362 (Div 2)C】【STL-map 最近公共祖先思想】Lorenzo Von Matterhorn 數域二叉樹的路徑權值變更查詢二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- PostgreSQL遺傳學應用-矩陣相似距離計算(歐式距離,…XX距離)SQL矩陣
- 編輯距離及編輯距離演算法演算法
- Laravel 距離排序Laravel排序
- 最小距離分類器,互動式選取影像樣本分類資料,進行最小距離分類(實現歐式距離,馬氏距離,計程距離)
- milvus 使用 l2 歐式距離計算向量的距離,計算出來的距離的最大值是多少?