LeetCode 94 二叉树中序遍历
题目描述:给定一个二叉树,返回它的中序遍历。
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38.2 MB, 在所有 Java 提交中击败了14.07%的用户
递归
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
dfs(root, result);
return result;
}
public void dfs(TreeNode root, List<Integer> inorderTraversal) {
if(root==null) {
return;
}
else{
//左、根、右
dfs(root.left, inorderTraversal);
inorderTraversal.add(root.val);
dfs(root.right, inorderTraversal);
}
return;
}
}
非递归: 使用栈
- 对于某个非空根节点,将其入栈
- 若根节点左子节点不为空,重复1步骤;否则进入3步骤
- 因为左子节点为空(无左子树/访问完毕),因此将栈顶根节点弹出并访问
- 若根节点有子节点不为空,重复1步骤;否则重复3步骤
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:38 MB, 在所有 Java 提交中击败了44.37%的用户
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
//使用栈进行非递归形式遍历
List<TreeNode> stack = new ArrayList<TreeNode>();
TreeNode node = root;
while(!stack.isEmpty() || node!=null){
if(node!=null) {
stack.add(node);
node = node.left;
}
else if(node==null) {
node = stack.get(stack.size()-1);
result.add(node.val);
stack.remove(stack.size()-1);
node = node.right;
}
}
return result;
}
}