LeetCode: 505.left叶子节点
admin
2023-06-25 17:02:32
0

计算给定二叉树的所有左叶子之和。

 

示例:

 

3

/ \

9 20

/ \

15 7

 

在这个二叉树中,有两个左叶子,分别是 9 15,所以返回 24

 

解析

我们需要找到这样的节点

 

属于叶子节点

属于父节点的左子节点

方法一:用栈,dfs遍历,用全局变量res作为累积和。遍历的过程中传递该节点是否是左子节点。同时判断左右子节点是否为None,则可以知道是不是左叶子节点。

class Solution:

    def sumOfLeftLeaves(self, root: TreeNode) -> int:

        stack = []

        res = 0

        if not root:

            return res

        stack.append((root, 0))

        while len(stack) != 0:

            p, flag = stack.pop()

            if flag == 1:

                if p.left == p.right == None:

                    res += p.val

            if p.right:

                stack.append((p.right, 0))

            if p.left:

                stack.append((p.left, 1))    

        return res

方法二,用递归遍历。遍历到左叶子节点则加上左叶子节点的值。

class Solution:

    def sumOfLeftLeaves(self, root: TreeNode) -> int:

        self.res = 0

        def walk(p):

            if p:

                if p.left:

                    if p.left.left == p.left.right == None:

                        self.res += p.left.val

                    walk(p.left)

                if p.right:

                    walk(p.right)

        walk(root)

        return self.res

方法三, 仍是递归,没有使用全局变量。而是使用在递归函数内部累积的方式(即有返回值)。遍历到左叶子节点,则返回值就在此基础上加上右节点的遍历。

class Solution:

    def sumOfLeftLeaves(self, root: TreeNode) -> int:

        if root == None:

            return 0

        res = 0

        if root.left:

            if root.left.left == root.left.right == None:

               res += root.left.val

        return res + self.sumOfLeftLeaves(root.left) + self.sumOfLeftLeaves(root.right)

方法四,在递归的过程中,用一个形参记录该节点是否为左孩子点。和用stack遍历类似。

class Solution:

    def sumOfLeftLeaves(self, root: TreeNode) -> int:

        def cal(p, dir):

            if not p:

                return 0

            if p.left == p.right == None:

                if dir == 1:

                    return p.val

                else:

                    pass      

            return cal(p.left, 1) + cal(p.right, 0)

        return cal(root, 0)

 

方法五,当然还能用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 sumOfLeftLeaves(TreeNode* root) {

        if (!root)

            return 0;

        if (root->left && !root->left->left && !root->left->right) {

            return root->left->val + sumOfLeftLeaves(root->right);

        }

        return sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);

    }

};

class TreeNode {

    int val;

    TreeNode left;

    TreeNode right;

 

    TreeNode(int x) {

        val = x;

    }

}

 

class Solution {

    public int getLeafCount(TreeNode root) {

        if (root == null) {

            return 0;

        }

        if (root.left == null && root.right == null) {

            // 输出叶子节点

            System.out.println("leaf nodes:" + root.val);

            return 1;

        }

        return getLeafCount(root.left) + getLeafCount(root.right);

    }

}

public class Test {

    public static void main(String[] args) {

        Solution tree = new Solution();

        /* create a tree */

        TreeNode root = new TreeNode(3);

        root.left = new TreeNode(9);

        root.right = new TreeNode(20);

        function(){ //XM返佣 http://www.fx61.com/brokerlist/xm.html

        root.right.left = new TreeNode(15);

        root.right.right = new TreeNode(7);

        System.out.println(tree.getLeafCount(root));

    }

}


相关内容

热门资讯

电视为什么一直闪屏 由于电源电压不稳定或电源供电不足的缘故、电视分辨率的故障、电视存在周围有电磁干扰的缘故、电视的刷新频...
专访塞尔维亚总统武契奇 塞尔维亚总统武契奇首次对中国进行国事访问,接受《高端访谈》专访。他说,这是他政治生涯中最重要的一次访...
大理宾川:六一儿童节前夕,警方... “大风在刮,大雪在下。烽火中拼杀,危难的关头热血护中华。不怕流血,不怕牺牲。只为守护家,先烈用生命换...
杀入固态电池赛道,5150 亿... 农夫山泉创始人、前中国首富钟睒睒,又有新动作! 近日,钟睒睒通过旗下养生堂战略投资固态电池材料企业智...
南京测试机器人楼宇外立面清洗,... 扬子晚报网5月29日讯(记者 张可)南京存量楼宇数量庞大、外立面日常养护、翻新清洁需求旺盛。长期以来...
特朗普推迟就伊朗相关协议作最终... 新华社华盛顿5月29日电(记者黄强 徐剑梅)据美国《纽约时报》29日援引一名不愿透露姓名的政府高级官...
字节跳动AI4S团队调整,由杨... 有传言称,字节Seed旗下AI4S团队,正在讨论新一轮组织调整,包括从字节分拆的可能性。 5月29日...
算启新程 智领未来 中国移动亮... 蓬勃盛夏,智潮奔涌。5月28日,2026世界智能产业博览会(以下简称“智博会”)在天津盛大开幕。作为...
原创 v... PChome 5月29日评测,作为一个手机相册里存着几千张Live图的人,vivo S系列一直是我的...
神舟二十一号航天员乘组平安抵京 据中国载人航天工程办公室消息,圆满完成神舟二十一号载人飞行任务的航天员乘组,于北京时间2026年5月...