1.题目描述
2.思路
二叉树的前序遍历遵循 根左右
(1)方法 preorderTraversal
输入参数: TreeNode root
root是二叉树的根节点。
返回值: List
返回一个包含二叉树节点值的列表,这些值按照前序遍历的顺序排列。
功能:
这个方法是前序遍历的主方法,它创建一个空的List来存储遍历结果。
然后,它调用一个辅助方法preorderHelper,将根节点root和结果列表result传递给它。
最后,返回结果列表result。
(2)输入参数:
TreeNode node: 当前节点。
List result: 用于存储遍历结果的列表。
功能:
这个方法是一个递归方法,用于执行前序遍历。
检查节点是否为空:
如果当前节点node为空,直接返回,不做任何处理。
访问根节点:
如果当前节点不为空,将当前节点的值node.val添加到结果列表result中。
递归遍历左子树:
调用自身preorderHelper,传入当前节点的左子节点和结果列表result,继续遍历左子树。
递归遍历右子树:
调用自身preorderHelper,传入当前节点的右子节点和结果列表result,继续遍历右子树。
工作原理
从根节点开始,将根节点的值添加到结果列表中。
递归地遍历左子树,在每个节点上重复步骤1。
当左子树遍历完成后,递归地遍历右子树,同样在每个节点上重复步骤1。
3.代码实现
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public List<Integer> preorderTraversal(TreeNode root) {//TreeNode node 当前节点List<Integer> result=new ArrayList<>();//用于存储遍历结果的列表。preoderHelper(root,result);/*功能:这个方法是前序遍历的主方法,它创建一个空的List<Integer>来存储遍历结果。
然后,它调用一个辅助方法preorderHelper,将根节点root和结果列表result传递给它。
最后,返回结果列表result。*/return result;}private void preoderHelper(TreeNode node,List<Integer> result){if(node==null){return;}result.add(node.val);//访问根节点preoderHelper(node.left,result);//递归遍历左子树preoderHelper(node.right,result);//右子树}
}
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
/*class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();preoderHelper(root,result);return result;}private void preoderHelper(TreeNode node,List<Integer> result){if(node==null){return;}result.add(node.val);//访问根节点preoderHelper(node.left,result);//递归遍历左子树preoderHelper(node.right,result);//右子树}
}*/class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result=new ArrayList<>();if(root==null){return result;}Stack<TreeNode> stack=new Stack<>();stack.push(root);while(!stack.isEmpty()){TreeNode current=stack.pop();result.add(current.val);//访问根节点//入栈先右后左,出栈先左后右if(current.right!=null){stack.push(current.right);}if(current.left!=null){stack.push(current.left);}}return result;}
}