数据结构之二叉树基础oj练习

1.单值二叉树

力扣https://leetcode-cn.com/problems/univalued-binary-tree/数据结构之二叉树基础oj练习_第1张图片

以上是递归图解思路:这样的思路非常不好想到。

也就是利用了我们的分治思想和逆向思维。

首先说说这里的分治思想

分治也就是要一层一层地分治下去判断。

第一个if语句在这里起到了非常关键的作用,为什么这样说呢?

这个if函数我们设计者的本意可能是防止root为空时,那么也属于单值二叉树,但是听过我们画了递归图后发现,这个if函数竟然在后面强大地起到了判断真假的效果

看着这个图进行思考,当我们最后一个节点的左右子树同时都为空时,很显然这就可以看作一个独立的节点,那么我们就返回true,并且在return里面是一个并的关系,那么必须两个都为true时,往上返回才会返回true。

逆向思维:

可能很多数人在这里想的是去判断根的值和左右子树的值相等,这样的作法会使得程序非常地繁琐,我们可以采用逆向思维,加入一旦出现了左右子树与根有不相同的情况,那么我们直接返回false就可,并且这里就一个值得注意的地方:在判断值时首先要判断这不是一个空指针才行!

这题的思维非常跳跃且需要非常清晰的逻辑条理

数据结构之二叉树基础oj练习_第2张图片

 2.二叉树的前序遍历

力扣https://leetcode-cn.com/problems/binary-tree-preorder-traversal/

此题有几个需要非常注意的点:

第一首先我们需要自己malloc一个数组出来,然而这个数组的大小我们并不知道,所以我们首先需要写一个函数来递归算出传进来的数组实际大小是多少,并且在最后的时候将这个数组的大小赋值给returnSize一下,如果这里最后不将size赋值程序也会跑不了。

第二在这个题目所给的接口函数中,我们不方便进行前序遍历,很难递归,因为如果在这个函数里面去完成递归,意味着我们每次都要malloc一下,所以我们应当自己设计一个函数去完成递归。

第三,在设计函数递归的时候,数组的起始地址i=0这一步应当放在外部赋值,并且需要非常小心这里的i需要传地址过去,如果不传地址会造成函数栈帧销毁过后i并为受到++操作的影响,最后结果会是随机值。

数据结构之二叉树基础oj练习_第3张图片

数据结构之二叉树基础oj练习_第4张图片

力扣https://leetcode-cn.com/problems/binary-tree-inorder-traversal/

数据结构之二叉树基础oj练习_第5张图片

力扣https://leetcode-cn.com/problems/binary-tree-postorder-traversal/

数据结构之二叉树基础oj练习_第6张图片

力扣https://leetcode-cn.com/problems/same-tree/

数据结构之二叉树基础oj练习_第7张图片

101. 对称二叉树 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/problems/symmetric-tree/

数据结构之二叉树基础oj练习_第8张图片

数据结构之二叉树基础oj练习_第9张图片

此题的对此思想跟上一题非常类似,先判断根节点是否为空,判断完成过后。我们新建立一个函数,函数需要传root的左右两个子树。让这左右两个子树去进行比较,这一步就跟上面题目的代码非像了,唯独不一样的是,这一题是拿左子树的left和右子树的right不断递归比较这个对称结构,不过思路都是一模一样的。

另一棵树的子树 - 提交记录 - 力扣(LeetCode) (leetcode-cn.com)https://leetcode-cn.com/submissions/detail/285277393/

数据结构之二叉树基础oj练习_第10张图片

二叉树遍历_牛客题霸_牛客网【牛客题霸】收集各企业高频校招笔面试题目,配有官方题解,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=M276https://www.nowcoder.com/practice/4b91205483694f449f94c179883c1fef?tpId=60&&tqId=29483&rp=1&ru=/activity/oj&qru=/ta/tsing-kaoyan/question-ranking先大致将这个树描绘一下:

数据结构之二叉树基础oj练习_第11张图片

 数据结构之二叉树基础oj练习_第12张图片

 

你可能感兴趣的:(数据结构,数据结构,算法)