第十周算法分析与设计: 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 3

Output:
1
Example 2:
Input:
  1
  / \
2   3
/   / \
4   5 6
/
7
Output:
7
Note: You may assume the tree (i.e., the given root node) is not NULL.

题目来自此处


解法思路:
       这个解法的主要思路是创建一个新的队列level用来存储节点所在树的层数,它跟层次遍历树节点的顺序同步。每次知道遍历到了新一层,可以直接只保存这一层第一个节点,那么层次遍历到了最后一层,就可以得到这层最左边的节点,即是整棵树Bottom Left Tree Node

int findBottomLeftValue(TreeNode* root) {
        if(root == NULL) return 0;
        TreeNode *bot_left;
        queue<TreeNode*> tree;
        queue<int> level;
        level.push(1);
        tree.push(root);
        int m = 0;
        while(!tree.empty()) {
            int lvl = level.front();
            if(tree.front()->left){
                tree.push(tree.front()->left);
                level.push(lvl+1);
            }
            if(tree.front()->right){
                tree.push(tree.front()->right);
                level.push(lvl+1);
            }
            if(lvl > m) {
                m = lvl;
                bot_left = tree.front();
            }

            level.pop();
            tree.pop();
        }
        return bot_left->val;
    }

算法的时间复杂度为 O(N) ,N为该二叉树的叶节点数目。


despair

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值