给定一个二叉树,返回它的中序 遍历。
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,3,2]
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
递归
递归时直接打印
public static void inOrderRecur(Node root){
if(root== null) return;
inOrderRecur(root.left);
System.out.print(root.value + " ");
inOrderRecur(root.right);
}
辅助函数
时间复杂度:O(n),递归函数T(n)=2*T(n/2)+1
空间复杂度:最坏情况下需要空间O(n),平均情况为O(logn)
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer>list = new ArrayList();
helper(root, list);
return list;
}
public void helper(TreeNode root, List<Integer>list){
if(root != null){
if(root.left != null){
helper(root.left, list);
}
list.add(root.val);
if(root.right != null){
helper(root.right, list);
}
}
}
}
迭代
基于栈的遍历
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List <Integer> list = new ArrayList();
Stack <TreeNode> stack = new Stack();
if(root != null){
while(!stack.isEmpty() || root != null){
if(root != null){
stack.push(root);
root = root.left;
}else{
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
}
return list;
}
}
注
递归时
1.使用辅助函数
2.使用栈
2.List是接口,使用new ArrayList()实例化
来源:CSDN
作者:ellieokokok
链接:https://blog.csdn.net/qq_26327971/article/details/104728398