嗨,大家好,我是袁廚(因為酷愛做飯,所以自己考取了廚師證)。之前一直看大家寫的部落格,學到了很多東西。然後最近萌生了自己寫的想法,將自己知道的分享給需要的同學。以後每天會為大家分享leetcode精選題目的各種題解和Python, JS, JQ, CSS, PHP, JAVA的一些小Demo。請大家關注我,一起交流學習吧。
class Solution {
public int findBottomLeftValue(TreeNode root) {
if(root == null){
return 0;
}
//建立一個佇列,用來儲存每一層的數值
Queue<TreeNode> queue = new LinkedList<TreeNode>();
int leftnum = 0;
//入棧
queue.offer(root);
//迴圈條件
while(!queue.isEmpty()){
int size = queue.size();
//獲取第一個元素,即我們找到的最左邊的元素
leftnum = queue.element().val;
for(int i = 0;i < size ; i++){
//出隊
TreeNode p = queue.poll();
TreeNode left = p.left;
TreeNode right = p.right;
if(left != null){
queue.offer(left);
}
if(right != null){
queue.offer(right);
}
}
}
return leftnum;
}
}
//用來判斷又到達下一層的時候,因為leftlen是會改變的,
//每下一層則會加1.當下到新的一層時則將最左邊的值賦給maxlevelvalue進行輸出。
if(maxlen < leftlen){
maxlen = leftlen;
maxlevelvalue = root.val;
}
class Solution {
int maxlen = 0;
int maxlevelvalue = 0;
public int findBottomLeftValue(TreeNode root) {
if(root == null){
return 0;
}
dfs(root,1);
return maxlevelvalue;
}
public void dfs(TreeNode root,int leftlen){
//葉子節點情況
if(root.left == null && root.right == null){
//更新了一層,重新賦值
if(maxlen < leftlen){
maxlen = leftlen;
maxlevelvalue = root.val;
}
return ;
}
//左節點
if(root.left != null){
leftlen++;
dfs(root.left,leftlen);
//回溯
leftlen--;
}
if(root.right != null){
leftlen++;
dfs(root.right,leftlen);
leftlen--;
}
return ;
}
}
當然這個程式碼是可以精簡的,但是就顯示不出來遞迴三要素啦,所以為了便於理解,先根據遞迴三要素理解完之後再精簡吧。
這個題目是我比較喜歡的,遞迴的邏輯比較難想,層序遍歷的話是比較容易的。明天會做一些新的題型,繼續加油!
作者:LeetCode
連結:https://leetcode-cn.com/problems/rotate-array/solution/xuan-zhuan-shu-zu-by-leetcode/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。