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/

欢迎讨论和交流!


posted @ 2020-07-30 16:45  臭咸鱼  阅读(94)  评论(0编辑  收藏  举报