LeetCode513找樹左下角的值
阿新 • • 發佈:2020-07-30
題目連結
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/
歡迎討論和交流!