【力扣】二叉树两种不同的递归中序遍历
一:列表相加
代码:
def inOrder1(node):
if not node: return []
left = inOrder1(node.left)
right = inOrder1(node.right)
return left + [node.val] + right
二:用一个全局变量,往里面添加元素
代码:
def inOrder2(node, res):
if not node: return
inOrder2(node.left, res)
res.append(node.val)
inOrder(node.right, res)
第二种方式适用的题目更多,可以在此基础上添加代码实现不同的功能。例如力扣530.二叉搜索树的最小绝对差,代码如下
class Solution:
def getMinimumDifference(self, root: TreeNode) -> int:
self.res = float("inf")
self.last = None
self.inOrder(root)
return self.res
def inOrder(self, node):
if not node:
return
self.inOrder(node.left)
if self.last is not None:
self.res = min(self.res, abs(node.val - self.last))
self.last = node.val
self.inOrder(node.right)
java代码
class Solution {
int last = -1;
int res = Integer.MAX_VALUE;
public int getMinimumDifference(TreeNode root) {
dfs(root);
return res;
}
public void dfs(TreeNode node) {
if (node == null) return;
dfs(node.left);
if (last != -1) {
res = Math.min(res, node.val - last);
}
last = node.val;
dfs(node.right);
}
}