牛客網劍指offer 二叉樹中和為某一值的路徑

2021-08-21 04:19:44 字數 804 閱讀 1069

輸入一顆二叉樹和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。

首先想到的自然是遞迴。遞迴思路為,若當前節點為空,則返回;若當前節點為葉子節點,且val與期望數值相等,則將該路徑加入結果;若當前節點為非葉節點,則期望數值減去該節點的val,然後遞迴呼叫左右子樹。

困難的地方不在於遞迴,而在於記錄多條路徑。一種討巧的方式是用全域性變數或者成員變數。

class solution 

}findpath(num-node->val,node->left);

findpath(num-node->val,node->right);

path.erase(path.end()-1);//路徑要記得清理已走過的節點

}vector> findpath(treenode* root,int expectnumber)

};

另外一種方法則是通過引數引用傳遞路徑向量。

class solution 

}findpath(num-node->val,node->left,res,path);

findpath(num-node->val,node->right,res,path);

path.erase(path.end()-1);//路徑要記得清理已走過的節點

}vector> findpath(treenode* root,int expectnumber)

};

個人覺得還是第二個方法比較好,雖然函式引數個數多了一點。

牛客《劍指Offer》 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹原本可以用遞迴的方式定義,所以面對此類問題注意向遞迴的思想靠攏。將整棵樹的構造過程視為對其左右子樹的構造過程,關鍵如何劃分子樹...

牛客網 劍指office 二叉樹中和為某一值的路徑

題目 輸入一顆二叉樹的跟節點和乙個整數,列印出二叉樹中結點值的和為輸入整數的所有路徑。路徑定義為從樹的根結點開始往下一直到葉結點所經過的結點形成一條路徑。注意 在返回值的list中,陣列長度大的陣列靠前 思路 當用前序遍歷 點的值。struct treenode class solution vec...

劍指offer 牛客網 第四題 重構二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重構出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如 輸入前序遍歷序列 1,2,4,7,2,5,6,8 輸入中序遍歷序列 4,7,2,1,5,3,8,6 public class solution private treenode re...