迭代法:就是不使用递归,利用while循环,重复执行循环体内的代码求解。
思路:利用栈存储节点,然后先让右节点入栈,再让左节点入栈。出栈时才是左、右的顺序。
//前序遍历
//迭代法:重复执行一段代码来求解
//利用栈,先将根节点的右孩子放进栈,再将左孩子放进栈
public static List<Integer> preorderTraversal(TreeNode root){
List<Integer> result=new ArrayList<>();
Stack<TreeNode> stack=new Stack<>();
if(root!=null){
stack.push(root);
}
while (!stack.empty()){
TreeNode node=stack.pop(); //取栈顶元素
result.add(node.val);
if(node.right!=null){
stack.push(node.right); //右节点入栈
}
if(node.left!=null){
stack.push(node.left); //左节点入栈
}
}
return result;
}