1. 程式人生 > 實用技巧 >LeetCode513找樹左下角的值

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/

歡迎討論和交流!