LeetCode–二叉树的中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
/**
* 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> ans=new ArrayList<Integer>();
//初始化一个栈
Deque<TreeNode> stake =new LinkedList<TreeNode>();
//判断条件如果栈里没有元素和指针所指的节点为空
while(root!=null || !stake.isEmpty()){
//对二叉树的左子树遍历放入栈中,直到为空
while(root!=null){
stake.push(root);
root=root.left;
}
//将栈中的第一个元素弹出然后放入结果组中
//再将下一个root的右节点作为开始节点进行循环
root=stake.pop();
ans.add(root.val);
root=root.right;
}
return ans;
}
}
我们的中序遍历,实际上就是对于一个二叉树,先遍历其左子树,再遍历根节点和左子树,所以我们利用堆栈来进行操作二叉树