File tree Expand file tree Collapse file tree 1 file changed +18
-20
lines changed
Expand file tree Collapse file tree 1 file changed +18
-20
lines changed Original file line number Diff line number Diff line change @@ -83,23 +83,20 @@ def dfs(root):
8383
8484问题得以解决。
8585
86- 这里还有最后一个问题就是返回值,题目要返回的实际上是最左下角的值。而我用了一个黑科技的方法(注意看注释):
86+ 这里还有最后一个问题就是返回值,题目要返回的实际上是最左下角的值。如何取到最左下角的节点呢?我们来看下核心代码你就懂了,代码比较简单。
8787
8888``` py
89- self .pre = self .ans = TreeNode(- 1 )
90- def dfs (root ):
91- if not root: return
92- dfs(root.left)
93- root.left = None
94- self .pre.right = root
95- # 当第一次执行到下面这一行代码,恰好是在最左下角, 这个时候 self.pre = root 就切断了 self.pre 和 self.ans 的联系
96- # 之后 self.pre 的变化都不会体现到 self.ans 上。
97- # 直观上来说就是 self.ans 在遍历到最左下角的时候下车了,而 self.pre 还在车上
98- # 因此最后返回 self.ans.right 即可
99- self .pre = root
100- dfs(root.right)
101- dfs(root)
102- return self .ans.right
89+
90+ self .pre = self .ans = None
91+ def dfs (root ):
92+ if not root: return
93+ dfs(root.left)
94+ root.left = None
95+ if self .pre: self .pre.right = root
96+ # 当第一次执行到下面这一行代码,恰好是在最左下角,此时 self.pre = None,其他任何时候 self.pre 都不是 None。
97+ if self .pre is None : self .ans = root
98+ self .pre = root
99+ dfs(root.right)
103100```
104101
105102## 关键点
@@ -111,18 +108,19 @@ return self.ans.right
111108
112109``` py
113110class Solution :
114- def convertBiNode (self , root ) :
115- self .pre = self .ans = TreeNode( - 1 )
111+ def convertBiNode (self , root : TreeNode) -> TreeNode :
112+ self .pre = self .ans = None
116113 def dfs (root ):
117114 if not root: return
118115 dfs(root.left)
119116 root.left = None
120- self .pre.right = root
117+ if self .pre: self .pre.right = root
118+ if self .pre is None : self .ans = root
121119 self .pre = root
120+
122121 dfs(root.right)
123122 dfs(root)
124- return self .ans.right
125-
123+ return self .ans
126124```
127125
128126** 复杂度分析**
You can’t perform that action at this time.
0 commit comments