代码随想录算法训练营第十三天| 226.翻转二叉树|101. 对称二叉树|104.二叉树的最大深度|111.二叉树的最小深度
226.翻转二叉树
文档讲解:代码随想录
视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树 | LeetCode:226.翻转二叉树_哔哩哔哩_bilibili
1. 根节点可以交换左右指针,其他层逻辑不清楚,觉得应该不是简单的交换指针。
2. 从下到上,依次交换节点的左右指针即可,关键在于选择遍历顺序,可以选择前序遍历和后序遍历,后续遍历(左右中,右左中)是先处理下层节点再处理当前层节点,处理每个节点都是执行一个交换指针操作。
3. 交换指针的逻辑,javascript交换指针函数需要传递root,不能改变root.left和root.right的值达到交换指针的效果。
4.用了一个小时左右。
101. 对称二叉树
文档讲解:代码随想录
1. 根节点可以比较左右指针,其他层如何比较不知道。
2. 以根节点的子节点leftnode,rightnode这一层为例,首先判断leftnode,rightnode是否为空,leftnode和rightnode都为空,满足对称返回true, leftnode,rightnode其中一个为空则返回false,如果leftnode,rightnode都不为空则判断leftnode,rightnode两个节点的值是否相等,不相等则返回false,相等则继续递归比较leftnode.left和rightnode.right是否想等,leftnode.right和rightnode.left是否相等。如果这两次判断都为true,则结果为true,否则结果为false。递归结束条件为当前遍历节点为空。
3. 以根节点的子节点leftnode,rightnode这一层为例,首先判断leftnode,rightnode是否为空,leftnode和rightnode都为空,满足对称返回true, leftnode,rightnode其中一个为空则返回false,如果leftnode,rightnode都不为空则判断leftnode,rightnode两个节点的值是否相等,不相等则返回false,相等则继续递归比较leftnode.left和rightnode.right是否想等,leftnode.right和rightnode.left是否相等。如果这两次判断都为true,则结果为true,否则结果为false。递归结束条件为当前遍历节点为空。
4. 用了一个小时左右。
104.二叉树的最大深度
文档讲解:代码随想录
视频讲解:二叉树的高度和深度有啥区别?究竟用什么遍历顺序?很多录友搞不懂 | LeetCode:104.二叉树的最大深度_哔哩哔哩_bilibili
1. 只想到了层序遍历可以计算深度。
2. 根节点的最大高度就是二叉树的最大深度,二叉树要求高度,通过后序遍历(即左右中)往上计算,叶子节点的高度为1,对于左右中的遍历顺序来说,中节点的最大深度高度为左右子节点高度中的最大值+1,递归结束条件为遍历节点为空,此时高度为0。
3. 根节点的最大高度就是二叉树的最大深度,二叉树要求高度,通过后序遍历(即左右中)往上计算,叶子节点的高度为1,对于左右中的遍历顺序来说,中节点的最大深度高度为左右子节点高度中的最大值+1,递归结束条件为遍历节点为空,此时高度为0。
4. 用了一个小时左右。
111.二叉树的最小深度
文档讲解:代码随想录
1. 只想到了层序遍历可以计算深度。
2. 同样可以转换为计算二叉树的最小高度,采用左右中的遍历顺序,注意二叉树最小深度的定义,是从根节点到叶子节点的长度,不是空节点,所以需要添加判断条件 — 当左子树为空有子树为空时返回右子树的高度+1;当左子树不为空右子树为空时,返回左子树的高度+1;当左右子树都为空时,说明此时为叶子节点,高度为1;当左右子树都不为空时,分别计算左右子树的高度,取最小值再+1即为中节点对应高度;递归结束条件为当前节点为空。
3. 当左子树为空有子树为空时返回右子树的高度+1;当左子树不为空右子树为空时,返回左子树的高度+1。
4. 用了一个小时左右。
原文地址:https://blog.csdn.net/weixin_45596561/article/details/139854244
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!