美文网首页
查找树的某一层

查找树的某一层

作者: 小跑001 | 来源:发表于2020-08-08 15:56 被阅读0次

以前有朋友问我怎么查找树的某一层节点, 还花了点时间去思考, 觉得不应该这种基本问题还不能一下子反应过来, 于是手动用go实现了一遍. 直接看代码:

package main

import "fmt"
import "container/list"

type Node struct {
    value int
    left  *Node
    right *Node
}

func find_level_nodes(root *Node, level int) (ret []int) {
    if root == nil || level < 1 {
        return nil
    }

    queue := list.New()
    queue.PushBack(root)
    cur_level := 0
    next_first_node := root

    for queue.Len() > 0 {
        f := queue.Front()
        node := f.Value.(*Node)

        if node == next_first_node {
            cur_level++
            if cur_level > level {
                break
            }

            next_first_node = nil
        }

        if node.left != nil {
            queue.PushBack(node.left)
            if next_first_node == nil {
                next_first_node = node.left
            }
        }
        if node.right != nil {
            queue.PushBack(node.right)
            if next_first_node == nil {
                next_first_node = node.right
            }
        }

        fmt.Println(node.value)
        if cur_level == level {
            ret = append(ret, node.value)
        }

        queue.Remove(f)
    }

    return ret
}

func main() {
    fmt.Println("hello")

    node1 := &Node{
        value: 1,
    }

    /*
        node2 := &Node{
            value: 2,
        }
    */

    node3 := &Node{
        value: 3,
        left:  node1,
    }

    node4 := &Node{
        value: 4,
    }

    node1.right = node4

    ret := find_level_nodes(node3, 2)
    fmt.Println(ret)
}


主要思想还是在于用队列来实现层遍历, 以及标记下一层初始节点来计算层次, 其中下一层的初始节点未必能首次找到, 只要在遍历当前层次节点的时候发现下一层初始节点为空就可以设置.

相关文章

  • 查找树的某一层

    以前有朋友问我怎么查找树的某一层节点, 还花了点时间去思考, 觉得不应该这种基本问题还不能一下子反应过来, 于是手...

  • MySQL和NoSQL基础概要

    MySQL 索引 B+Tree平衡树,查找树,所有叶子节点位于同一层进行查找时首先再根节点进行二分查找,找到一个k...

  • Mysql实战面试题

    B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。 B...

  • 数据结构 - 树 - 红黑树

    1. 介绍 大家都知道二叉树查找树有一个问题,就是容易偏向某一侧,这样就像一个链表结构了,失去了树结构的优点,查找...

  • 数据结构和算法树的进阶(八)

    平衡树 常见平衡树:平衡二叉查找树,2-3查找树,AVL树, 红黑树 2-3查找树 概述:保证查找树的平衡性,我们...

  • 《数据结构与算法》知识点(四)

    第七章 查找 顺序查找、折半查找、索引查找、分块查找是静态查找,动态查找有二叉排序树查找,最优二叉树查找,键树查找...

  • 《算法》笔记 14 - 单词查找树

    R向单词查找树数据结构查找插入查找所有键通配符匹配最长前缀删除R向单词查找树的性质 三向单词查找树三向单词查找树的...

  • 二叉搜索树、平衡二叉树

    -二叉搜索树 查找问题:静态查找和动态查找,静态查找可以用二分查找-判定树,那么针对动态查找数据如何组织?(树的动...

  • 完全二叉树 平衡二叉树 二叉查找树 B树 B+树

    1. 3分钟理解完全二叉树、平衡二叉树、二叉查找树 完全二叉树: 叶子节点只能分布在树的倒数第1层和倒数第二层,...

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

网友评论

      本文标题:查找树的某一层

      本文链接:https://www.haomeiwen.com/subject/qpehdktx.html