LeetCode54题:
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
思路:选择递归或者迭代实现
迭代实现:
// 迭代实现
List<Integer> list = new ArrayList<>();//用list来接收遍历的元素
Deque<TreeNode> que = new LinkedList<>();//栈来实现迭代遍历
while( root != null || !que.isEmpty()){ //当节点不为空或者栈不为空时
while (root != null){ //节点不为空就一直循环
que.push(root); //将节点推入栈中
root = root.left; //节点变为左子节点
}
//左子节点都被推到栈中后
root = que.pop(); //将第一个节点取出来
list.add(root.val); //添加到list中
root = root.right; //右节点
}
return list;
递归实现:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
list = InOrder(root,list);
return list;
}
public List<Integer> InOrder(TreeNode node,List<Integer> list){
//判断是否是空树
if(node == null){
return ;
}
if(node.left != null){
InOrder(node.left,list);
}
list.add(node.val);
if(node.right != null){
InOrder(node.right,list);
}
}