题目
Given a binary tree, return the preorder traversal of its nodes’ values.
给出一棵二叉树,返回其节点值的前序遍历解题思路
递归方式:返回根节点,遍历左,遍历右,当节点为空时递归结束
public ArrayList<Integer> preorderTraversal(TreeNode root) {
// write your code here
ArrayList<Integer> res = new ArrayList<Integer>();
if (root == null) {
return res;
}
helper(root, res);
return res;
}
public void helper(TreeNode root, ArrayList<Integer> res) {
if (root == null) { // 递归结束条件,节点空
return;
}
res.add(root.val); // 记录根节点
helper(root.left, res); // 递归左
helper(root.right, res); // 递归右
}
迭代方法:用栈进行前序遍历步骤如下
1. 当当前元素不为空或者栈不为空时循环
2. 当当前元素不为空时,当前元素进栈,访问当前元素,把左节点当作当前元素。
3. 当当前元素为空时,弹出栈顶元素,并把栈顶元素右节点当当前元素
public ArrayList<Integer> preorderTraversal(TreeNode root) {
// write your code here
ArrayList<Integer> res = new ArrayList<Integer>();
if (root == null) {
return res;
}
LinkedList<TreeNode> stack = new LinkedList<TreeNode>(); //用链表做栈
while (root != null || !stack.isEmpty()) { // 当当前元素或栈不空时循环
if (root != null) {
stack.push(root); // 当前元素进栈
res.add(root.val); // 访问当前元素
root = root.left; // 左节点变当前元素
} else {
root = stack.pop(); // 当前元素为出栈元素
root = root.right; // 右节点变当前元素
}
}
return res;
}