转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477967
出处:https://leetcode.com/problems/binary-tree-inorder-traversal/
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
该题目的意思就是中序遍历二叉树,保存结点值到list集合中返回。
递归方式 + 非递归方式
递归方式
public List<Integer> list = new ArrayList<Integer>();
/** * 递归方式 <br /> * 1ms * * @param root * @return */
public List<Integer> inorderTraversal(TreeNode root) {
inOrder(root);
return list;
}
/** * 递归方式 * * @param node */
public void inOrder(TreeNode node) {
if (node == null) {
return;
}
if (node.left != null) {
inOrder(node.left);
}
list.add(node.val);
if (node.right != null) {
inOrder(node.right);
}
}
LeetCode平台 Run Time 是 1ms 。
非递归方式
用栈
/** * 非递归方式<br /> * 2ms * * @param root * @return */
public List<Integer> inorderTraversal2(TreeNode root) {
if (root == null) {
return list;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode tempNode = root;
stack.push(tempNode);
while (!stack.isEmpty()) {
while ((tempNode = stack.peek()) != null) {
tempNode = tempNode.left;
stack.push(tempNode);
}
//
stack.pop();
//
if (!stack.isEmpty()) {
tempNode = stack.pop();
list.add(tempNode.val);
stack.push(tempNode.right);
}
}
return list;
}
LeetCode平台 Run Time 是 2ms 。
so easy~~