龙空技术网

打基础之LeetCode算法题第27日:求二叉树叶子节点值序列

吾是我师 407

前言:

如今你们对“计算二叉树叶子节点个数的算法”大概比较关切,各位老铁们都想要知道一些“计算二叉树叶子节点个数的算法”的相关知识。那么小编在网上收集了一些有关“计算二叉树叶子节点个数的算法””的相关资讯,希望同学们能喜欢,姐妹们一起来了解一下吧!

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言和Python,本来考虑Java,但是篇幅有限,有兴趣的朋友自己试试

LeetCode 872. 两棵二叉树是否有相同叶子节点序列(Leaf-Similar Trees)

问题描述:

对于一个二叉树,所有的叶子节点值按照从左到右顺序组成的序列叫做"叶子节点值序列"。

例如下面的二叉树,它的叶子节点值序列是[6,7,4,9,8]。

现在给定两棵二叉树,判断它们是否具有相同的叶子节点值序列。

节点的C语言定义如下:

注:

每棵树有1~100个节点。

C语言实现:

解决这个问题的思路非常简单,就是对二叉树进行遍历,无所谓哪一种遍历方法。因为实际上我们并不在乎遍历根节点的顺序,我们只需要获取所有的叶子节点。

然后比较两棵树的叶子节点值序列。

具体的实现有一点点不同,下面说明。

首先定义一个整形数组leaves用来存放叶子节点值序列,初始值都是0。

注意提示"每个树有1~100个节点",按照二叉树性质很容易知道,每个二叉树叶子节点不会超过64个。

遍历函数traverse()返回一个整数。

对于第一次调用来说这个返回值就是第一棵树的叶子节点的数量。

第二次调用的时候数组leaves是已被填充了的,这时候会判断相同位置的叶子节点值是否和数组leaves里面相同位置的值相等来确定函数的返回值。

所以如果两棵二叉树节点值序列相同,那么他们traverse()返回值应该是相同的,否则就是不同的。

python语言的实现:

python的实现是完全按照上面的思路,对两个二叉树进行遍历获取两个叶子值序列,然后比较它们。

标签: #计算二叉树叶子节点个数的算法