首页 > 其他分享 >二叉树的右视图

二叉树的右视图

时间:2024-12-17 15:56:30浏览次数:12  
标签:node count right 视图 二叉树 left root ret

二叉树的右视图

描述

给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例:

输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:

   1            <---
 /   \
2     3         <---
 \     \
  5     4       <---

代码1(错误)

最开始的想法就是一直匹配最右边,当该节点没有最右侧的子树时,再去匹配它的左子树,然后再去寻找最右侧

class Solution(object):
    def rightSideView(self, root):
        if root == None:
            return []
        ret = [root.val]
        while root.right or root.left:
            rightNode = root.right
            if rightNode == None:
                leftNode = root.left
                ret.append(leftNode.val)
                root = root.left
            else:
                ret.append(rightNode.val)
                root = root.right
        return ret

但是遇到这样的情况的话,是有问题的

   1            <---
 /   \
2     3         <---
  \    
   4           <---

也就是上面的程序只会输出 1 3 而最后的结果应该是 1 3 4

代码2

因为之前还做过二叉树的层次遍历这道题,想着右侧视图,不就是层次遍历时候的最右侧的节点么?想到这里,就重新复现了一下二叉树的层次遍历的代码~,然后通过一个状态位来记录 最右侧的节点

class Solution(object):
    def rightSideView(self, root):
        if root == None:
            return []
        ret = []
        stack = [root]
        secondStack = []
        while stack or secondStack:
            count = 0
            while stack:
                node = stack.pop()
                if count == 0:
                    ret.append(node.val)
                count += 1

                if node.right:
                    secondStack.insert(0, node.right)
                if node.left:
                    secondStack.insert(0, node.left)
            
            count = 0
            while secondStack:
                node = secondStack.pop()
                if count == 0:
                    ret.append(node.val)
                count += 1

                if node.right:
                    stack.insert(0, node.right)                
                if node.left:
                    stack.insert(0, node.left)
        return ret

标签:node,count,right,视图,二叉树,left,root,ret
From: https://blog.csdn.net/qq_44182424/article/details/144537770

相关文章

  • 之字形打印二叉树 剑指offer
    题目描述       请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如,按之字形顺序打印下图二叉树的结果为:题目分析       按之字形顺序打印二叉树需要......
  • AI绘画 手把手教你快速制作角色三视图
    哈喽这里是海绵“本文介绍SD生成三视图的几种方法:提示词直接输出、三视图LoRa微调和OpenPose控制骨架,其中openpose出图最稳定。三视图是电商模特和[游戏角色作图的必备技能。让我们尽快掌握此商业变现能力……”之前给大家安利过SD跟MJ最大不同之处,就是控图能力。SD利用......
  • Oracle数据库循环重建多个物化视图shell脚本
    #!/bin/bash#设置数据库连接信息DB_HOST="LOCALHOST"DB_PORT="1521"DB_SID="pdb"DB_USER="mics"DB_PASS="GZL11mics"TNS_SERVICE="${DB_SID}"START_TIME=$(date+"%Y-%m-%d%H:%M:%S")echo"开......
  • 搞定leetcode面试经典150题之二叉树
    系列博客目录文章目录系列博客目录基础知识1.二叉树的基本定义2.二叉树的性质3.二叉树的类型4.二叉树的遍历5.二叉树的实现6.常见的二叉树算法7.二叉树的应用总结例题104.二叉树的最大深度226.翻转二叉树101.对称二叉树100.相同的树102.二叉树的层序遍历98.验......
  • 什么是数据库的视图?
    在数据库中,视图(View)是一种虚拟的表,它是通过查询从一个或多个基本表中派生出来的结果集。视图并不实际存储数据,而是存储SQL查询,查询的结果会在视图被调用时动态生成。视图的作用类似于一个存储的查询,可以简化复杂的查询操作,提供数据的安全性,并且可以为用户提供定制化的视图。视图......
  • 二叉树常见题目2
    [Algo]二叉树常见题目21.最近公共祖先LCABinaryTreeNode*LCA(BinaryTreeNode*root,BinaryTreeNode*a,BinaryTreeNode*b){if(root==nullptr||root==a||root==b)returnroot;BinaryTreeNode*l=LCA(root->left,a,b),*r=LCA(root->right,a,......
  • 二叉树常见题目
    [Algo]二叉树常见题目1.层序遍历//1.层序遍历voidBFS(BinaryTreeNode*root){queue<BinaryTreeNode*>q;vector<BinaryTreeNode*>v;q.push(root);while(!q.empty()){while(!q.empty()){v.push_back(q.fro......
  • 代码随想录day18 | leetcode 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236
    刷题收获所有递归的写法都与正常人类想法的实现顺序相反,都是先写条件成立会发生什么再写递归成立条件通过递归调用栈实现回到上一个节点节点(恢复上一层的状态),调用栈能够记录每次递归调用的函数状态,包括函数的局部变量、参数以及函数执行到的具体位置。当递归到某个节点......
  • 代码随想录训练营第十五天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 22
    110.平衡二叉树题目链接:110.平衡二叉树-力扣(LeetCode)讲解链接:代码随想录 求高度不是求深度高度需要从下到上(后序遍历)深度需要从上到下(先序遍历)Java代码:classSolution{publicbooleanisBalanced(TreeNoderoot){//递归做法returngetHeight......
  • 代码随想录训练营第十八天| 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.
     530.二叉搜索树的最小绝对差 题目链接/文章讲解:代码随想录视频讲解:二叉搜索树中,需要掌握如何双指针遍历!|LeetCode:530.二叉搜索树的最小绝对差_哔哩哔哩_bilibili 注意是二叉搜索树,二叉搜索树可是有序的。给你一个二叉搜索树的根节点 root ,返回 树中任意两......