online_judge
, python3
給定一棵二元樹,問任意兩個節點的最長距離是多少。
最長路徑不一定會經過根節點,但一定會經過擁有左右子節點的節點(根節點除外喔)。 這是因為如果一個節點只有一個子節點,那麼只要往子節點方向走就可以得到更長的距離了(除非你走到葉子〔末端〕,無法再往下走)。 但如果擁有左右子節點,那麼就可以同時往左右走,而無視掉從父節點來的路徑。 例如:
1
/ \
2 3
/ \
4 5
/ \
6 7
/ \
8 9
最長路徑就是 8 -> 6 -> 4 -> 2 -> 5 -> 7 -> 9,並不會經過根節點。 實際操作上可以以遞迴從根節點開始遍歷,每個節點都回傳自身往下走的最長距離。而同時持有左右節點的節點和根節點則需要額外計算自身往左和往右的最長距離,這個最長距離就是題目的答案。
Given a binary tree, you need to compute the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
Example:
Given a binary tree
1
/ \
2 3
/ \
4 5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
Note: The length of path between two nodes is represented by the number of edges between them.
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
max_level = 0
def traverse(self, root, level):
flag = 0
left_level = 0
right_level = 0
if root.left != None:
left_level = self.traverse(root.left, level + 1 )
flag += 1
if root.right != None:
right_level = self.traverse(root.right, level + 1 )
flag += 1
if flag == 2:
if self.max_level < left_level + right_level - (level * 2):
self.max_level = left_level + right_level - (level * 2)
return max(left_level, right_level)
elif flag == 1:
if self.max_level < max(left_level, right_level) - level:
self.max_level = max(left_level, right_level) - level
return max(left_level, right_level)
elif flag == 0:
return level
def diameterOfBinaryTree(self, root: TreeNode) -> int:
if root == None:
return 0
self.traverse(root, 1)
return self.max_level
Learn More →
tmux 的全稱是 Terminal Multiplexer,直譯過來就是終端(Terminal)多工器(Multiplexer),這個工具可以在單一 screen 之下 create, attach, detach 多個終端,熟悉之後十分好用。只是和 vim,vi 系列相同,所有操作皆能且只能使用鍵盤,不像 GNOME Terminal 一樣有直觀的 GUI 介面,算不上友善的學習曲線使人又愛又恨。關於 tmux 的基本概念和入門組合鍵,G. T. Wang 的文章提供了很不錯的繁體中文資料,本篇的重點在於如何配合 shell script 和 tmux 來快速建立一個順手的工作區。
Sep 18, 2024轉眼就在日本工作快半年了,想說就來整理一下求職當下的記錄吧。先說一下小弟我的狀況,原本其實是沒有來日本工作的計劃,打算就老老實實GG輪班救台灣的。只是剛好修個日文課,剛好老師介紹下參加了幾場面試,誤打誤撞的就拿到了還算可以的內定。瞄著日本的綠卡傻傻的就跑來了。所以說人生啊,緣分真的很重要。而計劃,永遠趕不上變化。
May 31, 2024Introduction
Jun 21, 2023Revision record version comment author v0.1.0 document built Marco Ma
Jan 20, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up