摘要:遞歸法復雜度時間空間遞歸棧空間對于二叉樹思路簡單的二叉樹遍歷,遍歷的過程中記錄之前的路徑,一旦遍歷到葉子節點便將該路徑加入結果中。當遇到最小公共祖先的時候便合并路徑。需要注意的是,我們要多帶帶處理目標節點自身是最小公共祖先的情況。
Root To Leaf Binary Tree Paths
Given a binary tree, return all root-to-leaf paths.遞歸法 復雜度
時間 O(b^(h+1)-1) 空間 O(h) 遞歸棧空間 對于二叉樹b=2
思路簡單的二叉樹遍歷,遍歷的過程中記錄之前的路徑,一旦遍歷到葉子節點便將該路徑加入結果中。
代碼public class Solution { Listres = new ArrayList (); public List binaryTreePaths(TreeNode root) { if(root != null) findPaths(root,String.valueOf(root.val)); return res; } private void findPaths(TreeNode n, String path){ if(n.left == null && n.right == null) res.add(path); if(n.left != null) findPaths(n.left, path+"->"+n.left.val); if(n.right != null) findPaths(n.right, path+"->"+n.right.val); } }
2018/2
class Solution: def binaryTreePaths(self, root): """ :type root: TreeNode :rtype: List[str] """ result = [] if root is None: return result self.findPaths(root, [], result) return result def findPaths(self, node, path, result): path.append(str(node.val)) if node.left is not None: self.findPaths(node.left, path, result) if node.right is not None: self.findPaths(node.right, path, result) if node.left is None and node.right is None: result.append("->".join(path)) path.pop()Node to Node Binary Tree Path
給定一棵二叉樹的根節點和兩個任意節點,返回這兩個節點之間的最短路徑深度優先標記 復雜度
時間 O(h) 空間 O(h) 遞歸棧空間
思路兩個節點之間的最短路徑一定會經過兩個節點的最小公共祖先,所以我們可以用LCA的解法。不同于LCA的是,我們返回不只是標記,而要返回從目標結點遞歸回當前節點的路徑。當遇到最小公共祖先的時候便合并路徑。需要注意的是,我們要多帶帶處理目標節點自身是最小公共祖先的情況。
代碼public LinkedListhelper(TreeNode n, TreeNode p, TreeNode q){ if(n == null){ return null; } LinkedList left = helper(n.left, p, q); LinkedList right = helper(n.right, p, q); // 當左右都為空時 if(left == null && right == null){ // 如果當前節點是目標節點,開啟一條新路徑 if(n == p || n == q){ LinkedList l = new LinkedList (); l.add(n); return l; } else { // 否則標記為空 return null; } // 如果左右節點都不為空,說明是最小公共祖先節點,合并兩條路徑 } else if(left != null && right != null){ finalPath.addAll(left); finalPath.add(n); Collections.reverse(right); finalPath.addAll(right); return left; // 如果當前節點是目標結點,且某一個子樹不為空時,說明最小公共祖先是節點自身 } else if (left != null){ left.add(n); if(n == p || n == q){ finalPath.addAll(left); } return left; } else { right.add(n); if(n == p || n == q){ finalPath.addAll(right); } return right; } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66159.html
摘要:在線網站地址我的微信公眾號完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個題。這是項目地址歡迎一起交流學習。 這篇文章記錄我練習的 LeetCode 題目,語言 JavaScript。 在線網站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號: showImg(htt...
摘要:只要我們能夠有一個以某一中間路徑和為的哈希表,就可以隨時判斷某一節點能否和之前路徑相加成為目標值。 最新更新請見:https://yanjia.me/zh/2019/01/... Path Sum I Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that addin...
摘要:月下半旬攻略道題,目前已攻略題。目前簡單難度攻略已經到題,所以后面會調整自己,在刷算法與數據結構的同時,攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區別...
摘要:棧迭代復雜度時間空間遞歸棧空間對于二叉樹思路首先我們分析一下對于指定某個節點為根時,最大的路徑和有可能是哪些情況。代碼連接父節點的最大路徑是一二四這三種情況的最大值當前節點的最大路徑是一二三四這四種情況的最大值用當前最大來更新全局最大 Binary Tree Maximum Path Sum Given a binary tree, find the maximum path sum...
摘要:小鹿題目二叉樹的最大深度給定一個二叉樹,找出其最大深度。二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。求二叉樹的深度,必然要用到遞歸來解決。分別遞歸左右子樹。 Time:2019/4/22Title: Maximum Depth of Binary TreeDifficulty: MediumAuthor:小鹿 題目:Maximum Depth of Binary Tre...
閱讀 2596·2023-04-25 15:07
閱讀 705·2021-11-24 10:21
閱讀 2298·2021-09-22 10:02
閱讀 3517·2019-08-30 15:43
閱讀 3222·2019-08-30 13:03
閱讀 2287·2019-08-29 17:18
閱讀 3586·2019-08-29 17:07
閱讀 1873·2019-08-29 12:27