輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
pre =
vin =
前序列表中第乙個是二叉樹的根節點,由於題目中資料都不重複,那麼我們找到中序列表中的根節點的位置,那麼左邊部分就是左子樹的全部,右邊就是右子樹的全部元素。然後利用遞迴就可以得到最終的二叉樹了。
treenode* reconstructbinarytree(vectorpre, vectorvin)
treenode *temp_ptr = new treenode(pre[0]);
vectorl_pre, l_vin, r_pre, r_vin;
int mid = -1;
for (size_t i = 0; i < vin_len; ++i)
if (mid < 0)
else
} for (size_t i = 1; i < pre_len; ++i)
else
} temp_ptr->left = reconstructbinarytree(l_pre, l_vin);
temp_ptr->right = reconstructbinarytree(r_pre, r_vin);
return temp_ptr;
}複製**
這道題整體思路熟悉二叉樹的前中後遍歷方法的話,還是比較簡單的,但是如果只是大概了解的話,可能寫**的過程中還是會被卡兩下的,特別是個別的地方,找根節點的位置的時候,之前把 mid 宣告稱 size_t 因為編譯器警告下面的判斷型別不匹配。結果就踩到坑中還半天不自知,最後想了想,算了還是宣告成負數,簡單而且正常也不會出現啥問題啊 手動滑稽。 劍指offer題目
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣...
劍指OFFER 題目review
劍指offer ac 三道題,現在review下 題目一 從尾到頭列印鍊錶 輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。我的思路 1.鍊錶值從頭到尾順序放入vector中 2.逆序vector 實現 class solution int size data.size for in...
劍指offer的題目
題目描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級 它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。分析 跳乙個n階台階的方法數 class solution 題目描述 我們可以用2 1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2 1的小矩形無重疊地覆蓋乙個2 n的大矩形,總...