`

Binary Tree

 
阅读更多
public class BinaryTree
{

    Node root;

    public void addNode(int key, String name)
    {

        // Create a new Node and initialize it

        Node newNode = new Node(key, name);

        // If there is no root this becomes root

        if (root == null)
        {

            root = newNode;

        }
        else
        {

            // Set root as the Node we will start
            // with as we traverse the tree

            Node focusNode = root;

            // Future parent for our new Node

            Node parent;

            while (true)
            {

                // root is the top parent so we start
                // there

                parent = focusNode;

                // Check if the new node should go on
                // the left side of the parent node

                if (key < focusNode.key)
                {

                    // Switch focus to the left child

                    focusNode = focusNode.leftChild;

                    // If the left child has no children

                    if (focusNode == null)
                    {

                        // then place the new node on the left of it

                        parent.leftChild = newNode;
                        return; // All Done

                    }

                }
                else
                { // If we get here put the node on the right

                    focusNode = focusNode.rightChild;

                    // If the right child has no children

                    if (focusNode == null)
                    {

                        // then place the new node on the right of it

                        parent.rightChild = newNode;
                        return; // All Done

                    }

                }

            }
        }

    }

    // All nodes are visited in ascending order
    // Recursion is used to go to one node and
    // then go to its child nodes and so forth

    public void inOrderTraverseTree(Node focusNode)
    {

        if (focusNode != null)
        {

            // Traverse the left node

            inOrderTraverseTree(focusNode.leftChild);

            // Visit the currently focused on node

            System.out.println(focusNode);

            // Traverse the right node

            inOrderTraverseTree(focusNode.rightChild);

        }

    }

    public void preorderTraverseTree(Node focusNode)
    {

        if (focusNode != null)
        {

            System.out.println(focusNode);

            preorderTraverseTree(focusNode.leftChild);
            preorderTraverseTree(focusNode.rightChild);

        }

    }

    public void postOrderTraverseTree(Node focusNode)
    {

        if (focusNode != null)
        {

            postOrderTraverseTree(focusNode.leftChild);
            postOrderTraverseTree(focusNode.rightChild);

            System.out.println(focusNode);

        }

    }

    public Node findNode(int key)
    {

        // Start at the top of the tree

        Node focusNode = root;

        // While we haven't found the Node
        // keep looking

        while (focusNode.key != key)
        {

            // If we should search to the left

            if (key < focusNode.key)
            {

                // Shift the focus Node to the left child

                focusNode = focusNode.leftChild;

            }
            else
            {

                // Shift the focus Node to the right child

                focusNode = focusNode.rightChild;

            }

            // The node wasn't found

            if (focusNode == null)
                return null;

        }

        return focusNode;

    }

    public static void main(String[] args)
    {

        BinaryTree theTree = new BinaryTree();

        theTree.addNode(50, "Boss");

        theTree.addNode(25, "Vice President");

        theTree.addNode(15, "Office Manager");

        theTree.addNode(30, "Secretary");

        theTree.addNode(75, "Sales Manager");

        theTree.addNode(85, "Salesman 1");

        // Different ways to traverse binary trees

        theTree.inOrderTraverseTree(theTree.root);

        System.out.println();
        theTree.preorderTraverseTree(theTree.root);
        System.out.println();
        theTree.postOrderTraverseTree(theTree.root);

        // Find the node with key 75

        System.out.println("\nNode with the key 75");

        System.out.println(theTree.findNode(75));

    }
}

class Node
{

    int key;
    String name;

    Node leftChild;
    Node rightChild;

    Node(int key, String name)
    {

        this.key = key;
        this.name = name;

    }

    @Override
    public String toString()
    {

        return name + " has the key " + key;

        /*
         * return name + " has the key " + key + "\nLeft Child: " + leftChild + "\nRight Child: " +
         * rightChild + "\n";
         */

    }

}
分享到:
评论

相关推荐

    C#资源库-binarytree

    标题"C#资源库-binarytree"指的是一个使用C#编程语言实现的二叉树数据结构的代码库。在软件开发中,二叉树是一种基础且重要的数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这种...

    BinaryTree二叉树实现

    二叉树是一种重要的数据结构,它在计算机科学中扮演着至关重要的角色,特别是在算法和...在二叉树的`BinaryTree`文件中,可能会包含这些操作的具体实现,通过阅读和理解这些代码,可以深入学习和掌握二叉树的相关知识。

    Construct Binary Tree from Preorder and Inorder Traversal

    Construct Binary Tree from Preorder and Inorder Traversal 根据先序,中序建立二叉树

    binarytree.rar

    二叉树是一种在计算机科学中广泛使用的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右...解压“binarytree.rar”,查看其中的文件,理解数据结构,并根据给定的描述编写代码,以实现二叉树的前序遍历。

    BinaryTree-源码.rar

    【标题】:“BinaryTree-源码.rar”是一个与二叉树相关的源代码压缩包,它可能包含各种二叉树数据结构的实现,如二叉搜索树、平衡二叉树(AVL树或红黑树)或者自定义的二叉树结构。这个压缩包可能为学习数据结构与...

    BinaryTree

    This is a binary tree search implementation.

    binary tree C语言算法

    在计算机科学中,二叉树(Binary Tree)是一种数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。这种数据结构广泛应用于各种算法和问题解决,如搜索、排序、文件系统等。在C语言中实现二叉树,我们...

    Python-BinaryTree用于学习二叉树的Python库

    "Python-BinaryTree"是一个专门用于学习和操作二叉树的Python库,它提供了方便的API来创建、遍历和操作二叉树。 1. **二叉树的概念与类型** - 二叉树的基本概念:二叉树的每个节点包含一个值、一个指向左子树的...

    二叉树官方源码BinaryTree_src

    在给定的“二叉树官方源码BinaryTree_src”中,我们可以找到一系列与二叉树相关的源代码文件,这为理解和实现二叉树提供了宝贵的参考资料。 首先,我们看到一个名为"BinaryTreeDemo.clw"的文件,这可能是项目的工作...

    binaryTree

    在"binaryTree"文件中,可能包含了不同类型的二叉树操作的代码示例,如创建、插入、删除、遍历等。 6. **二叉树的复杂度分析**: - 时间复杂度:二叉树的搜索、插入和删除操作的时间复杂度在最坏情况下可能达到O(n...

    心希盼 C++ STL binaryTree

    对于“心希盼 binaryTree.doc”文档,很可能是对这种使用STL实现二叉树的详细教程或示例代码,可能涵盖了如何构建二叉树、执行各种操作以及解决实际问题的实例。通过阅读和理解这份文档,开发者能够深入理解如何结合...

    BinaryTree-BinaryTree

    BinaryTree-BinaryTree

    java-二叉树binaryTree

    在这个"java-二叉树binaryTree"主题中,我们将深入探讨二叉树的实现、操作以及相关的算法。 在Java编程语言中,二叉树可以被表示为一个类,这个类通常包含指向左右子节点的引用,以及可能包含的数据。下面是一个...

    BinaryTreeSort

    BinaryTreeSort的java实现,简单的二叉树排序

    Simple Binary Tree Class.zip_binary tree_tree

    在IT领域,二叉树(Binary Tree)是一种基础的数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这个压缩包"Simple Binary Tree Class.zip"包含了实现简单二叉树类的相关文件,包括...

    BinaryTree.cpp

    C++实现 操作函数包括先序、中序、后序遍历,求深度,深度、广度遍历 构建二叉树

    BinaryTree_java_

    本文将深入探讨如何用Java语言实现数据库中的二叉树查找,以"BinaryTree.java"为例,帮助你理解相关知识。 二叉树是由节点构成的数据结构,每个节点包含一个值以及最多两个子节点,分别称为左子节点和右子节点。...

    二叉树详解 binary tree

    二叉树(Binary Tree)是一种常见的数据结构,由一系列节点组成,每个节点包含左指针、右指针以及数据元素。在二叉树中,“根”指针指向树的最顶层节点,而左、右指针则递归地指向更小的“子树”。一个空指针代表没有...

    BinaryTree.zip

    在本项目"BinaryTree.zip"中,它通过Microsoft Foundation Classes (MFC)库实现了二叉树的可视化,使学习者能够直观地理解和操作二叉树。 MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,...

    BinaryTree.h

    有序二叉树创建 有序二叉树查找 二叉树遍历 有序二叉树删除 类模版实现的有序二叉树

Global site tag (gtag.js) - Google Analytics