102.二叉树的层序遍历
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:0.5h
思路:用队列存放遍历时节点的左右子节点,每当遍历上一层的时候,下一层的节点就被存放在队列中了。
代码:
226.翻转二叉树
文档和视频讲解:代码随想录(programmercarl.com)
状态:ac
用时:1h
思路:无论是前序遍历还是后序遍历都比较方便,中序遍历由于处理左子树后,交换左右子树,又处理右子树,但此时右子树已经是以前的左子树,相当于左子树被处理了两遍。
递归的思路先是确定返回值和参数,题目给的函数已经确定。然后是终止条件,当参数为空指针时就返回。最后是处理逻辑,如果是先序遍历,就是先交换左右子树,再进行两边子树的反转。
迭代的思路可以是层序遍历(广度优先)对遍历的每个节点的左右子树进行翻转,也可以是深度优先来完成。
代码:
101. 对称二叉树
文档和视频讲解:代码随想录(programmercarl.com)
状态:未ac
用时:1h
思路:由于要比较的是两边的子树,要遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中,常规的前中后序遍历是无法满足题意的。
递归的话,我们需要比较两边节点的值,如果两边都为空,则返回true,如果只有一边为空或者两边值不相等,返回false,只有左右节点值相同才进行下一步的递归,下一步递归的逻辑是两次递归,依次比较外侧和内侧。
迭代的话则是用队列存放节点,注意内侧的节点或者外侧的节点要放在一块,方便每次取出两个节点直接进行比较。
代码: