zoukankan      html  css  js  c++  java
  • LeetCode513找树左下角的值

    题目链接

    https://leetcode-cn.com/problems/find-bottom-left-tree-value/

    题解一

    • 层次遍历
    • 求最后一层最左边的结点
    • 我自己想的思路:层次遍历,保存每一层最左侧的结点,直到二叉树遍历结束
    // Problem: LeetCode 513
    // URL: https://leetcode-cn.com/problems/find-bottom-left-tree-value/
    // Tags: Tree Queue BFS
    // Difficulty: Medium
    
    #include <iostream>
    #include <queue>
    using namespace std;
    
    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    
    class Solution{
    public:
        // 求最后一层最左边的结点
        int findBottomLeftValue(TreeNode* root) {
            // 空树,题目已说明树不会为空
            if (root==nullptr) return 0;
            // 存储当前层中的结点
            queue<TreeNode*> parentNodes;
            parentNodes.push(root);
            // 按层遍历并保存每一层的第一个结点
            TreeNode* leftBottomNode;
            while(!parentNodes.empty()){
                queue<TreeNode*> childNodes;
                // 更新左下角结点指针
                leftBottomNode = parentNodes.front();
                // 获取下一层结点
                while(!parentNodes.empty()){
                    root = parentNodes.front();
                    parentNodes.pop();
                    if (root->left!=nullptr) childNodes.push(root->left);
                    if (root->right!=nullptr) childNodes.push(root->right);
                }
                // 更新当前层
                parentNodes = childNodes;
            }
            return leftBottomNode->val;
        }
    };
    

    题解二

    • 其他人的思路
    • 也是按层遍历,但是会先遍历右子结点再遍历左子结点,这样遍历二叉树时最后一个结点就是最后一层最左侧的结点
    // Problem: LeetCode 513
    // URL: https://leetcode-cn.com/problems/find-bottom-left-tree-value/
    // Tags: Tree Queue BFS
    // Difficulty: Medium
    
    #include <iostream>
    #include <queue>
    using namespace std;
    
    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    
    class Solution{
    public:
        // 求最后一层最左边的结点
        int findBottomLeftValue(TreeNode* root) {
            // 存储当前层中的结点
            queue<TreeNode*> nodes;
            nodes.push(root);
            // 按层遍历,但先遍历右子结点再遍历左子结点
            while(!nodes.empty()){
                root = nodes.front();
                nodes.pop();
                if (root->right!=nullptr) nodes.push(root->right);
                if (root->left!=nullptr) nodes.push(root->left);
            }
            return root->val;
        }
    };
    

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    Git使用教程
    H5项目常见问题汇总及解决方案
    globalAlpha 示例
    canvas 绘制三次贝塞尔曲线
    canvas 绘制二次贝塞尔曲线
    html5 图片360旋转
    HTML5 arc的例子
    HTML5 绘制阴影
    HTML5 canvas绘制文本
    html5 lineTo的使用例子
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13404775.html
Copyright © 2011-2022 走看看