LeetCode-94-二叉树的中序遍历
问题
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
提示:
- 树中节点数目在范围
[0, 100]内 -100 <= Node.val <= 100
代码
-
递归:
//中序遍历 递归 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); inorder(root, list); return list; } public void inorder(TreeNode root, List<Integer> list) { if (root == null) return; //左 inorder(root.left, list); //中 list.add(root.val); //右 inorder(root.right, list); } -
迭代:
伪代码:
栈s; p = root; while(p || s 不为空){ while(p){ p入栈; p = p左; } p = s顶; 弹出s顶; 访问p; p = p右; }//中序遍历 迭代 public List<Integer> inorderTraversal2(TreeNode root) { List<Integer> list = new ArrayList<>(); Stack<TreeNode> stack = new Stack<>(); while (root != null || !stack.isEmpty()) { while (root != null) { stack.push(root); root = root.left; } root = stack.pop(); list.add(root.val); root = root.right; } return list; }
扩展
前序遍历、后续遍历迭代伪代码
前序遍历伪代码:
栈s;
p = root;
while(p || s 不为空)
{
while(p)
{
访问p;
p右入栈;
p = p左;
}
p = s顶;
弹出s顶;
}
后序遍历:
栈s;
p = root;
while(p || s 不为空)
{
while(p)
{
访问p;
p左入栈;
p = p右;
}
p = s顶;
弹出s顶;
}

浙公网安备 33010602011771号