来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
题目描述
二叉树的中序遍历节点访问顺序:左节点、根节点、右节点
【二叉树的前序遍历节点访问顺序:根节点、左节点、右节点】
题目分析
二叉树中序遍历主要提供了两种方法:
- 迭代
- 递归
代码实现
public class MiddleOrder {
public static void main(String[] args) {
MiddleOrder preOrder = new MiddleOrder();
TreeNode root = new TreeNode(1, null, new TreeNode(2, new TreeNode(3), null));
// TreeNode root = null;
preOrder.preorderTraversal(root);
preOrder.preorder2(root);
}
/**
* 迭代算法
*
* @param root
* @return
*/
public List<Integer> preorder2(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root == null) {
return list;
}
LinkedList<TreeNode> stack = new LinkedList();
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.addLast(root);
root = root.left;
}
root = stack.removeLast();
list.add(root.val);
root = root.right;
}
System.out.println(list);
return list;
}
/**
* 递归
*
* @param root
* @return
*/
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
order(root, list);
System.out.println(list);
return list;
}
private void order(TreeNode root, List<Integer> list) {
if (root == null) {
return;
}
if (root.left != null) {
order(root.left, list);
}
list.add(root.val);
if (root.right != null) {
order(root.right, list);
}
}
}
两种方法的复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(n)
好了,今天就到这里,感谢各位看官到这里,不如点个关注吧!