leetcode 872. 叶子相似的树

题目1 . 叶子相似的树

题目描述:

image.png

题目分析

第一个版本 递归遍历

很清楚了 要想判断 是否相似 必须知道 全部的叶子节点
因为是有顺序的采用中顺遍历(dfs)

6 5 7 2 4 3 9 1 8

二叉树遍历的递归实现,每个结点只需遍历一次,故时间复杂度为O(n)。
而使用了递归,最差情况下递归调用的深度为O(n),所以空间复杂度为O(n)。
缺点:必须全部遍历完毕 才能获取叶子节点
如何获取第一个叶子节点 ?

第二个版本 非递归遍历

利用栈的特性(后进先出) 完成中顺遍历 先遍历完毕全部左面的然后遍历右边的
注意 这里不是队列 队列是层次遍历 层次遍历不满足叶子节点输出顺序

image.png

code

/**
https://leetcode-cn.com/submissions/detail/7688864/
**/
func leafSimilar(root1 *TreeNode, root2 *TreeNode) bool {

    var array1, array2 []int
    inorder(root1, &array1)
    inorder(root2, &array2)

    //检查结果
    if len(array1) != len(array2) {
        return false
    }
    for i := 0; i < len(array1); i++ {
        if array1[i] != array2[i] {
            return false
        }
    }
    return true
}

/**
Golang的引用类型包括 slice(大小固定)、map 和 channel
**/
func inorder(root *TreeNode, array *[]int) {
    if root == nil {
        return
    }
    inorder(root.Left, array)
    //只输出叶子节点
    if root.Left == nil && root.Right == nil {
        *array = append(*array, root.Val)
    }
    inorder(root.Right, array)
}

image.png

下个题目:

validate-binary-search-tree

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 上一篇文章讲述了树的概念, 特征以及分类, 旨在让我们理解什么是树, 树的一些常用的概念是什么,树的分类有哪些等。...
    DevCW阅读 2,072评论 4 10
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,954评论 0 13
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 3,262评论 0 0
  • 一路前行,感谢有你。 一直想写篇文章感谢你,感谢你多我的培养和引领。但想些的太多又不知从何说起,你到我校,成长...
    涓涓浅语阅读 470评论 0 3
  • 清晨从屋后竹节里萌出墙曾雪白,瓦曾青新芽与少年料峭似春寒,母亲料峭的愿望在每个寒冷的夜里结籽棉花洁白而缓慢,在枝头...
    告别旧名字阅读 243评论 4 5