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`文件中,可能会包含这些操作的具体实现,通过阅读和理解这些代码,可以深入学习和掌握二叉树的相关知识。
Construct Binary Tree from Preorder and Inorder Traversal 根据先序,中序建立二叉树
二叉树是一种在计算机科学中广泛使用的数据结构,它的每个节点最多有两个子节点,通常称为左子节点和右...解压“binarytree.rar”,查看其中的文件,理解数据结构,并根据给定的描述编写代码,以实现二叉树的前序遍历。
【标题】:“BinaryTree-源码.rar”是一个与二叉树相关的源代码压缩包,它可能包含各种二叉树数据结构的实现,如二叉搜索树、平衡二叉树(AVL树或红黑树)或者自定义的二叉树结构。这个压缩包可能为学习数据结构与...
This is a binary tree search implementation.
在计算机科学中,二叉树(Binary Tree)是一种数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。这种数据结构广泛应用于各种算法和问题解决,如搜索、排序、文件系统等。在C语言中实现二叉树,我们...
"Python-BinaryTree"是一个专门用于学习和操作二叉树的Python库,它提供了方便的API来创建、遍历和操作二叉树。 1. **二叉树的概念与类型** - 二叉树的基本概念:二叉树的每个节点包含一个值、一个指向左子树的...
在给定的“二叉树官方源码BinaryTree_src”中,我们可以找到一系列与二叉树相关的源代码文件,这为理解和实现二叉树提供了宝贵的参考资料。 首先,我们看到一个名为"BinaryTreeDemo.clw"的文件,这可能是项目的工作...
在"binaryTree"文件中,可能包含了不同类型的二叉树操作的代码示例,如创建、插入、删除、遍历等。 6. **二叉树的复杂度分析**: - 时间复杂度:二叉树的搜索、插入和删除操作的时间复杂度在最坏情况下可能达到O(n...
对于“心希盼 binaryTree.doc”文档,很可能是对这种使用STL实现二叉树的详细教程或示例代码,可能涵盖了如何构建二叉树、执行各种操作以及解决实际问题的实例。通过阅读和理解这份文档,开发者能够深入理解如何结合...
BinaryTree-BinaryTree
在这个"java-二叉树binaryTree"主题中,我们将深入探讨二叉树的实现、操作以及相关的算法。 在Java编程语言中,二叉树可以被表示为一个类,这个类通常包含指向左右子节点的引用,以及可能包含的数据。下面是一个...
BinaryTreeSort的java实现,简单的二叉树排序
在IT领域,二叉树(Binary Tree)是一种基础的数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这个压缩包"Simple Binary Tree Class.zip"包含了实现简单二叉树类的相关文件,包括...
C++实现 操作函数包括先序、中序、后序遍历,求深度,深度、广度遍历 构建二叉树
本文将深入探讨如何用Java语言实现数据库中的二叉树查找,以"BinaryTree.java"为例,帮助你理解相关知识。 二叉树是由节点构成的数据结构,每个节点包含一个值以及最多两个子节点,分别称为左子节点和右子节点。...
二叉树(Binary Tree)是一种常见的数据结构,由一系列节点组成,每个节点包含左指针、右指针以及数据元素。在二叉树中,“根”指针指向树的最顶层节点,而左、右指针则递归地指向更小的“子树”。一个空指针代表没有...
在本项目"BinaryTree.zip"中,它通过Microsoft Foundation Classes (MFC)库实现了二叉树的可视化,使学习者能够直观地理解和操作二叉树。 MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了Windows API,...
有序二叉树创建 有序二叉树查找 二叉树遍历 有序二叉树删除 类模版实现的有序二叉树