前序遍历(递归)
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList();
preorder(root,list);
return list;
}
public void preorder (TreeNode root , List<Integer> list){
if(root == null) return;
list.add(root.val);
preorder(root.left,list);
preorder(root.right,list);
}
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new LinkedList<>();
//利用栈来完成前序遍历
Stack<TreeNode> stack = new Stack<>();
//如果root为空就直接return list
if(root != null){
stack.push(root);
}
//保证遍历每一个元素
while(!stack.isEmpty()){
TreeNode pre = stack.pop();
list.add(pre.val);
//栈是先进后出 前序遍历是根左右的顺序 所以先放pre的右节点再放左节点 出栈顺序就可以为前序遍历
if(pre.right != null){
stack.push(pre.right);
}
if(pre.left != null){
stack.push(pre.left);
}
}
return list;
}
}
本文介绍了一种实现二叉树前序遍历的方法,包括递归和非递归两种方式。递归方法简洁直观,而非递归方法则通过栈来辅助实现,确保了遍历顺序的正确性。
4578

被折叠的 条评论
为什么被折叠?



