Problem:
Given a binary tree, return the inorder traversal of its nodes' values.
Explanation:
中序遍历给定二叉树
My Thinking:
使用常规递归进行中序遍历,不过这里需要添加一个函数,才能将结果列表作为参数传递。
My Solution:
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> numlist=new ArrayList<>();
recursive(root,numlist);
return numlist;
}
public void recursive(TreeNode root,List<Integer> numlist){
if(root!=null){
recursive(root.left,numlist);
numlist.add(root.val);
recursive(root.right,numlist);
}
}
}
Optimum Thinking:
- 同my thinking
- 使用栈
Optimum Solution:
(2)
public class Solution {
public List < Integer > inorderTraversal(TreeNode root) {
List < Integer > res = new ArrayList < > ();
Stack < TreeNode > stack = new Stack < > ();
TreeNode curr = root;
while (curr != null || !stack.isEmpty()) {
while (curr != null) {//从根结点开始将所有左孩子入栈
stack.push(curr);
curr = curr.left;
}
curr = stack.pop();//弹出一个左孩子
res.add(curr.val);//将其加入列表
curr = curr.right;//将其右结点继续循环
}
return res;
}
}