二、二叉树的中序遍历
本题给我们了一个二叉树,要求我们以中序遍历的方式输出它的值。
1.递归法
使用递归的方式来模拟遍历二叉树的过程,按照左头右的顺序进行,递归终止条件为遇到空节点,具体代码如下:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Integer> list = new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {inorderRecur(root);return list;}public void inorderRecur(TreeNode root) {if(root == null) {return;}inorderRecur(root.left);list.add(root.val);inorderRecur(root.right);}
}
复杂度分析
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。
2.迭代法
迭代法其实是递归法的另一种实现方式,我们通过维护一个栈来模拟实现递归的过程,具体代码如下:
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();Stack<TreeNode> sta = new Stack<>();TreeNode head = root;while(!sta.isEmpty() || head != null) {if(head != null) {sta.push(head);head = head.left;} else {head = sta.pop();list.add(head.val);head = head.right;}}return list;}
}
复杂度分析
- 时间复杂度:O(n)。
- 空间复杂度:O(n)。