目录
1.二叉树前序遍历---leetcode
思路 + 画图解析:
2.相同的树的判断
思路:
3.对称二叉树
思路分析:
4.另一棵树的子树
思路:
5.二叉树的便利---牛客网
建立二叉树的逻辑图:
总结:
1.二叉树前序遍历---leetcode
思路 + 画图解析:
题目要求是将前序遍历的结果放入一个数组里面去,而且leetcode很特殊的就是如果要返回一个数组,那么就必须返回这个数组的大小,所以他给出的接口,一个树这个二叉树的根,还有一个是
这个数组的大小,而且提示说我们还要开创这个数组,需要动态申请,但是,我们也不知道这个二叉树有多少数据,我们就必须先得到这个二叉树的大小,然后将其按照前序顺序放入数组。先知道二叉树的大小,我们创建一个函数来获取。
如上图所示,我们使用了一个三目表达式,如果根为空,就返回0,如果不为空,就返回他的左节点数 + 右节点数 + 1 。这样我们就能得到这个二叉树的大小了。得到 大小之后就是开辟数组的空间了。
开辟好数组以后我们就要将这个二叉树按照前序的顺序放入数组了。为了让答案更加清晰可见,我们再封装一个函数将二叉树填入数组。因为我们如果将 i 这个变量在函数里面设值的话就会导致每当执行这个函数时这个变量就要设置一次,为了防止这种现象的发生,我们就要使用传递指针的办法,传递指针可以从根本上解决这个问题,这就是这个题目唯一的难点。
这就是这个题目的最后的结果,我画了这个题目的递归解析图,大家不懂这个代码的意思的时候可以借鉴这个解析图来帮助大家理解,同样,大家也可以画这个图来帮助理解。
2.相同的树的判断
这一题的难度较低,我们直接将思路。
思路:
首先,我们要比较两个根是不是同时为空,是,则返回true,否,则返回false。如果这两个值相同,则往下继续比较,如果不同则返回false。思路简单,代码也简单,我们看代码。
3.对称二叉树
思路分析:
其实这题想起来还有点难,但是只要想对了,也就很简单,对称二叉树,我们仔细一点就可以发现其实是先让根和根比较,然后比较根的左节点和另一个根的右节点,就可以得出是不是对称二叉树了。其实也和上面的比较相同的树有点像。
还没有左孩子和右孩子的时候我们就将根和根比较,完全不会影响。
4.另一棵树的子树
思路:
这一题就是在树里找树,其实这一题的思路很简单,就是运用我们前面实现的相同的树的判断,当遇到的根节点的值和subroot的根节点的值相同的时候,我们就可以用相同树的判断,如果真的是同一棵树的话就返回true。那么,我们想要这些节点,那就将所有的根节点都遍历一遍和subroot的根节点比较。思路就是这样,我们开始实现。 这就是这个题目的解法。和前面的知识夹杂着一起考察。
5.二叉树的便利---牛客网
这一题的大概意思是这样的,题目给了我们一个字符串,#代表的是NULL,然后让我们根据这个字符串去建立一个二叉树,并且用中序的方法将他输出到我们的屏幕上。所以我们要做这样几件事,第一,我们要根据字符串来建立一个二叉树,第二,根据二叉树用中序输出。
建立二叉树的逻辑图:
我们获得一个字符串怎么将他建立成一个二叉树呢?
这个图就是按照前序的方法,将其建立成一个二叉树,大家可以按照我再上面标记的箭头来捋清楚这个思路。
这个就是按照我上面的思路写出的代码。
总结:
这五个题目都是围绕二叉树的题目,围绕二叉树的题目自然离不开递归思想,这个在五个题目里面每个都有用到,也是我们必须掌握的思想。望大家看了这篇文章之后都能有一定的收获。
一起加油吧!!!