zoukankan      html  css  js  c++  java
  • 0199-二叉树的右视图

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

    示例 1:

    输入: [1,2,3,null,5,null,4]
    输出: [1,3,4]
    示例 2:

    输入: [1,null,3]
    输出: [1,3]
    示例 3:

    输入: []
    输出: []

    提示:

    二叉树的节点个数的范围是 [0,100]
    -100 <= Node.val <= 100

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/binary-tree-right-side-view

    思路:
    层序遍历的时候,判断是否遍历到单层的最后面的元素,如果是,就放进result数组中,随后返回result就可以了

    python

    ···

    0199.二叉树的右视图

    class Solution:
    def levelOrder(self, root: TreeNode) -> [int]:
    """
    迭代法:双端队列,每次把单层的节点遍历出队列,另外将对应的左右节点加入队列
    :param root:
    :return:
    """
    results = []
    if not root:
    return results

        from collections import deque
        queue = deque([root]) # 初始化队列
    
        while queue:
            size = len(queue) # 遍历队列单层长度
            node = queue[-1] # 每次取最后一个节点
            results.append(node.val)
            for _ in range(size):
                cur = queue.popleft() # 通过size控制遍历次数
                if cur.left: # 添加当前pop节点的左节点进入队列
                    queue.append(cur.left)
                if cur.right: # 添加当前pop节点的右节点进入队列
                    queue.append(cur.right)
    
        return results
    
    def levelOrderRecur(self, root: TreeNode) -> [[int]]:
        """
        递归法,
        :param root:
        :return:
        """
        res = []
        def levelOrder(node, index):
            if not node: # 空,返空
                return []
            if len(res) < index: # 开始当前depth
                res.append([])
            res[index-1].append(node.val) # 当前层加入节点值到结果集
            if node.left: # 当前节点有左节点,继续递归,同时层数加1
                levelOrder(node.left, index+1)
            if node.right: # 当前节点有右节点,继续递归,同时层数加1
                levelOrder(node.right, index+1)
        levelOrder(root, 1) # 1层开始递归
        return res
    

    ···

    golang

    ···
    package binaryTree

    import "container/list"

    // 迭代遍历
    func rightSideView(root TreeNode) []int {
    var res = [][]int{}
    if root == nil { // 空时返回
    return res
    }
    queue := list.New() // 队列初始化
    queue.PushBack(root)
    var tmpArr []int
    for queue.Len() > 0 {
    length := queue.Len()
    for i:=0;i<length;i++ { // 遍历当层的节点
    node := queue.Remove(queue.Front()).(
    TreeNode) // 当次节点
    if node.Left != nil { // 节点的左节点入队
    queue.PushBack(node.Left)
    }
    if node.Right != nil { // 节点的右节点入队
    queue.PushBack(node.Right)
    }
    tmpArr = append(tmpArr, node.Val) // 节点值加入结果集
    }
    res = append(res, tmpArr)
    tmpArr = []int{}
    }
    finalRes := []int{} // 将层序遍历结果取每层节点的最后一个值即可
    for i:=0;i<len(res);i++ {
    finalRes = append(finalRes, res[i][len(res[i])-1])
    }
    return finalRes
    }

    ···

  • 相关阅读:
    kindeditor-4.1.10在线编辑器的使用[多个]
    从人被造的目的看灵魂的价值2014-07-07 唐崇荣 祷告吧
    C#&JQuery非缓存式无刷新临时存储数据之仿购物车功能
    仿主题广告轮播js
    C#&JQ仿网上商城商品条件筛选功能
    百度地图API调用实例之地址标注与位置显示
    Google Maps API 调用实例
    Jquery CheckBox复选框 全选/取消全选 最佳实现方式 参考案例
    基督徒的长篇情书-人生第二次表白之傻人自有傻人福^_^后知此事违神旨意_不要激动爱情,等它自发
    C# Ajax 手机发送短信验证码 校验验证码 菜鸟级别实现方法
  • 原文地址:https://www.cnblogs.com/davis12/p/15549907.html
Copyright © 2011-2022 走看看