美文网首页
多叉树查找

多叉树查找

作者: 懵懂小门神 | 来源:发表于2021-08-05 13:51 被阅读0次
public class NodeTree
{
    public string Value { get; set; }

    public List<NodeTree> ChildTree { get; set; }
}

class Program
{
    static void Main(string[] args) {
        var tree = new NodeTree() {
            Value = "1",
            ChildTree = new List<NodeTree>() {
                new NodeTree(){ Value="1-1",
                    ChildTree =new List<NodeTree>(){
                        new NodeTree() { Value="1-1-1"},
                        new NodeTree() { Value="1-1-2"}
                    }
                },
                new NodeTree(){ Value="1-2",
                    ChildTree =new List<NodeTree>(){
                        new NodeTree() { Value="1-2-1"},
                        new NodeTree() { Value="1-2-2",
                            ChildTree=new List<NodeTree>(){
                                new NodeTree() { Value="1-2-2-1"}
                            }
                        }
                    }
                },
                new NodeTree(){ Value="1-3"}
            }
        };
        var node = SearchNode(tree, "1-3");
        Console.WriteLine(node.Value);

        Console.WriteLine("===================");

        node = SearchNode2(tree, "1-2-1");
        Console.WriteLine(node.Value);

    }

    //深度优先,递归
    static NodeTree SearchNode(NodeTree tree, string valueToFind) {
        if (tree.Value == valueToFind) {
            return tree;
        }
        else {
            if (tree.ChildTree != null) {
                foreach (var item in tree.ChildTree) {
                    var temp = SearchNode(item, valueToFind);
                    if (temp != null) return temp;
                }
            }
        }
        return null;
    }

    //堆栈
    static NodeTree SearchNode2(NodeTree rootNode, string valueToFind) {
        var stack = new Stack<NodeTree>(new[] { rootNode });
        while (stack.Any()) {
            var n = stack.Pop();
            if (n.Value == valueToFind) return n;
            if (n.ChildTree != null)
                foreach (var child in n.ChildTree) stack.Push(child);
        }
        return null;
    }
}

相关文章

  • 索引 - 原理

    复杂度 有序二叉树又称二叉查找树 B-Tree B-Tree: 平衡多叉查找树 B(balanced): 左右子树...

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

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

  • 数据结构与算法 平衡二叉树(AVL树)

    AVL树是一种特殊的二叉查找树。 二叉查找树: ⼆叉排序树(Binary Sort Tree),⼜称为⼆叉查找树....

  • 多叉树查找

  • 二叉查找树

    1)二叉查找树是什么?2)二叉查找树的插入、删除、查找?3)Go代码实现 一、二叉查找树是什么?二叉查找树(BST...

  • 红黑树

    红黑树的本质就是一棵二叉查找树,所以先从二叉查找树来了解起。 二叉查找树 二叉查找树又称有序二叉树,具有以下特性:...

  • 二叉查找树

    二叉查找树,又称二叉搜索树 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: ...

  • 99-数据结构和算法

    难点:二叉树的遍历 红黑树 图的遍历 二叉查找树二叉查找树(binary search tree),二叉查找树在二...

  • 11-二叉查找树

    二叉查找树 1.什么是二叉查找树? 二叉查找树是一种支持数据动态的插入,删除,查找的数据结构。 2.二叉查找树的设...

  • 17张图带你解析红黑树的原理!保证你能看懂!

    二叉查找树 由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。 二叉查找树(Bin...

网友评论

      本文标题:多叉树查找

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