获得徽章 0
小跨计算机的前端菜鸡
小跨计算机的前端菜鸡
leetcode 111 二叉树的最小深度-层序遍历法:
使用层序遍历,先记录深度,在遍历每一层节点的时候,判断节点的左右节点是否存在,如果都不存在,则返回此时的深度即可
评论
leetcode 100 二叉树的右视图
我们可以改变一下层序遍历的顺序,以前的层序遍历是从左往右,而我们从右往左,这样每一层第一个入队列的就是最右边的元素。此时我们只将这个元素的值存入即可。(此方法需要定义一个变量来记录第一个)
此外我们也可以直接用原先层序遍历的方法,通过每层遍历是否为最后一个元素来确实是否是最右边的元素,直接保存将其值也可。
展开
评论
leetcode 199.二叉树的右视图
我们也可以直接用层序遍历的方法,通过size === 1 来判断最右边的元素,直接保存将其值即可。
此外,我们也可以改变一下层序遍历,以前的层序遍历是从左往右,而我们从右往左,这样每一层第一个入队列的就是最右边的元素。此时我们只将这个元素的值存入即可。(此方法可能需要定义一个变量来记录第一个)
展开
评论
leetcode 102:层序遍历
层序遍历类似于图的广度优先搜索,我们使用队列来存放遍历的节点,同时定义一个size来记录每一层的节点的数量。(因为我们一开始是将一层的节点都入队列,因此在这个时候需要记录一下此时队列的长度,也就是这一层节点是数量。以此来控制我们出队列的元素的数量。)
因此,内循环要通过size来控制,不能通过队列的长度控制,因为我们上一层的某个节点在出队列的同时,其左右子节点会入队列。通过size来控制队列弹出的元素个数,这样每一层内循环结束后,队列内的节点都为同在一层的节点。所以我们这个时候获取队列的长度,那么也就是这一层节点的数量size。代码如下:
function levelOrder(root: TreeNode | null): number[][] {
const res: number[][] = [];
if(root === null) {
return res;
}
const queue: TreeNode[] = [];
let curNode: TreeNode | null = null;
queue.push(root);
while(queue.length > 0){
let size = queue.length;
let arry: number[] = [];
while(size > 0){
curNode = queue.shift();
arry.push(curNode.val);
size--;
if(curNode.left !== null){
queue.push(curNode.left);
}
if(curNode.right !== null){
queue.push(curNode.right);
}
}
res.push(arry);

}
return res;
}
展开
评论
二叉树的统一迭代遍历方法。
由于我们之前的迭代遍历方法,先序访问的节点就是我们要处理的节点,而中序不是,所以其思想不同,而我们要弄一个都适用的方法,因此那我们就将访问的节点放入栈中,把要处理的节点也放入栈中但是要做标记。
如何标记呢,就是要处理的节点放入栈之后,紧接着放入一个空指针作为标记。
我们将访问的节点直接加入到栈中,但如果是处理的节点则后面放入一个空节点, 这样只有空节点弹出的时候,才将下一个节点放进结果集。
展开
评论
下一页
个人成就
文章被点赞 9
文章被阅读 6,802
掘力值 214
收藏集
0
关注标签
0
加入于