给定一个二叉树,返回它的中序 遍历。
解法一:
递归
class Solution {
public List < Integer > inorderTraversal(TreeNode root) {
List < Integer > res = new ArrayList < > ();
helper(root, res);
return res;
}
public void helper(TreeNode root, List < Integer > res) {
if (root != null) {
if (root.left != null) {
helper(root.left, res);
}
res.add(root.val);
if (root.right != null) {
helper(root.right, res);
}
}
}
}
解法二:
非递归
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> lst=new ArrayList<> ();
Stack<TreeNode> nodestack=new Stack<> ();
TreeNode cur=root;
while(cur!=null||!nodestack.isEmpty()){
while(cur!=null){
nodestack.push(cur);
cur=cur.left;
}
cur=nodestack.pop();
lst.add(cur.val);
cur=cur.right;
}
return lst;
}
}