時間限制:3秒
空間限制:32768k
有一棵二叉樹,樹上每個點標有權值,權值各不相同,請設計乙個演算法算出權值最大的葉節點到權值最小的葉節點的距離。二叉樹每條邊的距離為1,乙個節點經過多少條邊到達另乙個節點為這兩個節點之間的距離。
給定二叉樹的根節點root,請返回所求距離。
強調一點:我就是被卡在這很久的:不是所有節點中的最大最小值,而是葉子節點。
簡單的方法是:對每乙個葉子節點進行二進位制編碼,因為同宗的葉子節點左邊會是一樣的。
我的方法是先遍歷找出最大最小值,然後找出兩條路徑,接著從根節點開始比較,當不相同時開始計數。
/*struct treenode
};*/
class tree
if(root->val==min)
}else
lists.push_back(root->val);
if(root->left!=null)
dfslist(lists,max,min,root->left,minlist,maxlist);
if(root->right!=null)
dfslist(lists,max,min,root->right,minlist,maxlist);
}void haha(vector&maxlist,vector&lists)
if(root->left!=null)
dfs(max,min,root->left);
if(root->right!=null)
dfs(max,min,root->right);
}int getdis(treenode* root) {
// write code here
vectorminlist,maxlist;
int max=root->val,min=root->val;
dfs(max,min,root);
//coutdfslist(lists,max,min,root,minlist,maxlist);
int a=maxlist.size(),b=minlist.size();
//return a;
int tem=a
重建二叉樹 程式設計題
題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹,假設輸入的前序遍歷和中序遍歷的結果中都不含有重複值。前序遍歷 中序遍歷 主要思路 1.前序遍歷的第乙個元素是根節點,將根初始化。2.在中序遍歷中找到根的位置,根的左邊是左子樹,右邊是右子樹。3.然後左右遞迴。btnode reconstr...
(二叉樹提高題)還原二叉樹
給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入格式 輸入首先給出正整數n 50 為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區別大小寫 的字串。輸出格式 輸出為乙個整數,即該二叉樹的高度。輸入樣例 9 abdfghiec fdhgi...
二叉樹相關程式設計題總結
由前序遍歷和中序遍歷重建二叉樹 判斷一棵樹是否是完全二叉樹 求二叉樹兩個節點的最近公共祖先 將二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。前序序列 1 2 3 4 5 6 中序序列 3 2 4 1 6 5 在沒有重複節點的前提下 node greattr...