转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51477948
出处:https://leetcode.com/problems/binary-tree-preorder-traversal/
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,2,3].
该题目的意思就是先序遍历二叉树,保存结点值到list集合中返回。
先序遍历二叉树一般就是分为递归方式和非递归方式。
递归方式
public List<Integer> list = new ArrayList<Integer>();
/** * 先序遍历二叉树 * * @param root * @return */
public List<Integer> preorderTraversal(TreeNode root) {
preOrder(root);
return list;
}
/** * 递归方式 * * @param node */
public void preOrder(TreeNode node) {
if (node == null) {
return;
}
list.add(node.val);
if (node.left != null) {
preOrder(node.left);
}
if (node.right != null) {
preOrder(node.right);
}
}
非递归方式
通过栈来存储结点。
/** * 非递归方式 * * @param root * @return */
public List<Integer> preorderTraversal2(TreeNode root) {
if (root == null) {
return list;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
TreeNode tempNode = null;
while (!stack.isEmpty()) {
tempNode = stack.pop();
list.add(tempNode.val);
if (tempNode.right != null) {
stack.push(tempNode.right);
}
if (tempNode.left != null) {
stack.push(tempNode.left);
}
}
return list;
}
关于二叉树的遍历分为以下四种:
先序遍历
中序遍历
后序遍历
层序遍历
其中先序、中序、后序遍历又分别有递归方式和非递归方式。
so easy~~