【JAVA每日一题8-2】LeetCode--144. 二叉树的前序遍历

举报
.29. 发表于 2023/03/16 15:45:01 2023/03/16
【摘要】 java每日一题

题目、144. 二叉树的前序遍历

原题链接:144. 二叉树的前序遍历

题目描述:

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
/
image.png

输入:root = [1,null,2,3]
输出:[1,2,3]
/
示例 2:
输入:root = []
输出:[]
/
示例 3:
输入:root = [1]
输出:[1]
/image.png

输入:root = [1,2]
输出:[1,2]
/
image.png

输入:root = [1,null,2]
输出:[1,2]

解题思路:
先序遍历,就是从根节点开始,先遍历左孩子,再遍历右孩子;
当根节点为空的时候,直接返回空即可;
存在根节点,我们可以使用栈结构,先进后出的特点,将根节点以及一路而下的左孩子压栈,当没有左孩子,我们就能让栈顶元素出栈,同时获取出栈节点右孩子。
循环地重复上述操作,就可以完成二叉树的先序遍历。

提交代码:

/**
 * 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 list = new ArrayList();  //创建list集合,用于存放先序遍历的节点元素
        if(root == null) return list; //如果根节点为空,直接返回空的集合
        TreeNode node = root;         //获取根节点
        //创建堆结构
        Deque<TreeNode> stack = new LinkedList<>();
        //当堆不为空或二叉树节点不为空时
        while(!stack.isEmpty() || node != null){
            while(node != null){      //树节点不为空
                list.add(node.val);   //节点元素传入集合
                stack.push(node);     //同时节点如栈
                node = node.left;     //堆节点左孩子重复操作
                //当左子树所有的左孩子入栈,代表遍历完左子树的所有子节点
            }
            //堆顶节点出栈
            node = stack.pop();
            //循环遍历出栈节点的右孩子
            node = node.right;
        }
        return list;                  //返回存放先序遍历节点顺序的集合
    }
}

提交结果:

image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。