感覺好久沒寫blog了,好吧,最近在學習spring框架。感覺這玩意需要配置的環境太多,前面學習的東西差不多忘乾淨了。早點發現這一問題,並開始總結,可能就是最好的補救措施吧,遺忘總會有的,經常總結,經常回頭看一看就好了。常用常思考。
所以,今天來總結一下最近遇到的兩道比較有意思的二叉樹相關的題。
problem1:(個人感覺很經典)
給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。
二叉樹的結構如下
/*public class treelinknode
}*/
首先,圖中二叉樹中序遍歷的結果是嗯,再次檢查,沒有錯誤。
這樣我們可以分析一下,幾種得到下乙個節點的特殊形式。
1.如果乙個節點有右子樹,那麼他的下乙個節點是右子樹中的最左邊的節點(即右子樹中左子樹中的節點)
2.如果乙個節點無右子樹,且是其父節點的左子樹,那麼他的下乙個節點就是其父節點
3.如果乙個節點是其父節點的右子樹中的最右邊的節點,那麼需要根據指向父節點的指標找到整棵樹的根節點,若根節點存在右子樹,則繼續尋找下乙個節點
public treelinknode getnext(treelinknode pnode) else
//當該節點是其父節點的左孩子時,該節點的下乙個節點就是其父節點,否則,其下乙個節點就是樹的根節點
while(parent!=null && pnode!=parent.left)
return parent;
} public static treelinknode getleftnext(treelinknode pnode)
return pnode;
}
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
這一道題目是有擴充套件的。我想把他的擴充套件題目研究一下,再總結到部落格中
題目如下:給出乙個樹的前序遍歷,輸出這個樹所有可能的中序遍歷
二叉樹的最近公共祖先 二叉樹
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...
二叉樹的建立以及兩個二叉樹比較異同
關於二叉樹的建構函式 在主調函式中並不宣告號指標所指向的空間,在被調函式中可以直接使用。二叉樹的定義,以及比較 include using namespace std 二叉樹的二叉鍊錶的節點定義 typedef struct bitnode bitnode,bitree 建立二叉樹 若該節點的資料為...
演算法 二叉樹 DFS 二叉樹的最近公共祖先
給定乙個二叉樹,找到該樹中兩個指定節點的最近公共祖先。例如,給定如下二叉樹 root 3,5,1,6,2,0,8,null,null,7,4 示例 1 輸入 root 3,5,1,6,2,0,8,null,null,7,4 p 5,q 1 輸出 3 解釋 節點 5 和節點 1 的最近公共祖先是節點 ...