Find Bottom Left Tree Value宽度优先遍历算法详解

来源:互联网 发布:修改游戏数据 编辑:程序博客网 时间:2024/06/11 18:17

问题详见:Find Bottom Left Tree Value

      Given a binary tree, find the leftmost value in the last row of the tree.

Example 1:

Input:   2     / \    1   3Output: 1

Example 2:

Input:        1       / \      2   3     /   / \    4   5   6       /      7Output: 7

Note: You may assume the tree (i.e., the given root node) is not NULL.

解题思路:

      由题目可知该问题可以直接采用BFS的方法对其进行查找,通过使用队列的插入和删除操作直至找到二叉树中最后一行的最左边的元素,其时间复杂度为O(n)。下面是算法的C++代码和提交结果图。

BFS:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int findBottomLeftValue(TreeNode* root) {        queue<TreeNode*> q;        queue<int> level;        q.push(root);        level.push(0);        int m=0;        while(q.size()){            TreeNode *r = q.front(); q.pop();            int l = level.front(); level.pop();            if(r->left) {                q.push(r->left);                level.push(l+1);            }            if(r->right){                q.push(r->right);                level.push(l+1);            }            if(l > m){                m = l;                root = r;            }        }        return root->val;    }};

提交运行结果:
BFS

0 0