●??110.平衡二叉樹?
題目鏈接:https://leetcode.cn/problems/balanced-binary-tree/
解答:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html#google_vignette
一棵高度平衡二叉樹定義為:一個二叉樹每個節(jié)點 的左右兩個子樹的高度差的絕對值不超過1皇型。
●??257.?二叉樹的所有路徑?
題目鏈接:https://leetcode.cn/problems/binary-tree-paths/
解答:
這道題目要求從根節(jié)點到葉子的路徑诬烹,所以需要前序遍歷,這樣才方便讓父節(jié)點指向孩子節(jié)點弃鸦,找到對應(yīng)的路徑绞吁。
回溯:遞歸和回溯是同時進行的,所以需要放在同一個花括號里
paths.remove(paths.size()-1)
找到一條路徑以后唬格,要存儲:
StringBuffer sPath = new StringBuffer();//初始化
? ? ? ? ? ? for(int i=0; i<path.size()-1;i++){
? ? ? ? ? ? ? ? sPath.append(Integer.toString(path.get(i)));
? ? ? ? ? ? ? ? sPath.append("->");
? ? ? ? ? ? }
? ? ? ? ? ? sPath.append(Integer.toString(path.get(path.size()-1)));//最后一個單獨添加
? ? ? ? ? ? result.add(sPath.toString());
●??404.左葉子之和
題目鏈接:https://leetcode.cn/problems/sum-of-left-leaves/
解答:https://programmercarl.com/0404.%E5%B7%A6%E5%8F%B6%E5%AD%90%E4%B9%8B%E5%92%8C.html
左葉子的明確定義:節(jié)點A的左孩子不為空家破,且左孩子的左右孩子都為空(說明是葉子節(jié)點),那么A節(jié)點的左孩子為左葉子節(jié)點
那么判斷當(dāng)前節(jié)點是不是左葉子是無法判斷的购岗,必須要通過節(jié)點的父節(jié)點來判斷其左孩子是不是左葉子:如果該節(jié)點的左節(jié)點不為空汰聋,該節(jié)點的左節(jié)點的左節(jié)點為空,該節(jié)點的左節(jié)點的右節(jié)點為空喊积,則找到了一個左葉子
if (node.left !=null && node.left.left==null && node.left.right==null){
? ? ? ? ? ? ? ? sum+= node.left.val;
? ? ? ? ? ? }
遞歸法:
1. 確定遞歸的終止條件
2. 先計算左邊所有左子葉的節(jié)點和
3. 判斷這個節(jié)點為父節(jié)點是否存在左子葉 如果存在 將其值加上
4. 計算右邊所有左子葉的節(jié)點和
5.所有左子葉節(jié)點和相加并返回
迭代法:
使用中烹困、前、后序遍歷乾吻,前序和后序遍歷的寫法沒有本質(zhì)卻別髓梅,只是改變了入棧順序并做了一個反轉(zhuǎn)