软件编程
位置:首页>> 软件编程>> java编程>> java 二叉查找树实例代码

java 二叉查找树实例代码

作者:lqh  发布时间:2022-07-23 22:54:28 

标签:java,二叉查找树,二叉树

java 二叉查找树实例代码

1.左边<中间<右边

2.前序遍历 左中右

3.中序遍历 中左右

4.后序遍历 左右中


public class BinaryTree {

// 二叉树的根节点
 public TreeNode rootNode ;
 // 记录搜索深度
 public int count;

/**
  * 利用传入一个数组来建立二叉树
  */
 public BinaryTree(int[] data) {
   for (int i = 0; i < data. length; i++) {
     addNodeToTree(data[i]);
   }
 }

/**
  * 将指定的值加入到二叉树中适当的节点
  */
 private void addNodeToTree(int value) {
   TreeNode currentNode = rootNode;
   // 建立树根
   if (rootNode == null) {
     rootNode = new TreeNode(value);
     return;
   }

// 建立二叉树
   while (true) {
     // 新增的value比节点的value小,则在左子树
     if (value < currentNode.value ) {
       if (currentNode.leftNode == null) {
         currentNode.leftNode = new TreeNode(value);
         return;
       } else {
         currentNode = currentNode.leftNode;
       }
     } else { // 新增的value比节点的value大,在右子树
       if (currentNode.rightNode == null) {
         currentNode. rightNode = new TreeNode(value);
         return;
       } else {
         currentNode = currentNode. rightNode;
       }
     }
   }
 }

/**
  * 中序遍历(左子树 -树根- 右子树)
  */
 public void inOrder(TreeNode node) {
   if (node != null) {
     inOrder(node. leftNode);
     System. out.print("[" + node.value + "]");
     inOrder(node. rightNode);
   }
 }

/**
  * 前序遍历(树根 -左子树- 右子树)
  */
 public void preOrder(TreeNode node) {
   if (node != null) {
     System. out.print("[" + node.value + "]");
     preOrder(node. leftNode);
     preOrder(node. rightNode);
   }
 }

/**
  * 后序遍历(左子树 -右子树- 树根)
  */
 public void postOrder(TreeNode node) {
   if (node != null) {
     postOrder(node. leftNode);
     postOrder(node. rightNode);
     System. out.print("[" + node.value + "]");
   }
 }

/**
  * 从二叉树中查找指定value
  */
 public boolean findTree(TreeNode node, int value) {
   if (node == null) {
     System. out.println("共搜索" + count + "次");
     return false;
   } else if (node.value == value) {
     System. out.println("共搜索" + count + "次");
     return true;
   } else if (value < node.value) {
     count++;
     return findTree(node.leftNode , value);
   } else {
     count++;
     return findTree(node.rightNode , value);
   }
 }

/**
  * 利用中序遍历进行排序
  */
 public void sort() {
   this.inOrder(rootNode );
 }

class TreeNode {
   int value ;
   TreeNode leftNode;
   TreeNode rightNode;

public TreeNode(int value) {
     this.value = value;
     this.leftNode = null;
     this.rightNode = null;
   }
 }

public static void main(String[] args) {
   int[] content = { 50, 35, 27, 45, 40, 48, 78, 56, 90 };

BinaryTree tree = new BinaryTree(content);
   System. out.println("前序遍历:" );
   tree.preOrder(tree. rootNode);
   System. out.println("\n中序遍历:" );
   tree.inOrder(tree. rootNode);
   System. out.println("\n后序遍历:" );
   tree.postOrder(tree. rootNode);

System. out.println("\n\n开始搜索:" );
   boolean isFind = tree.findTree(tree.rootNode, 48);
   System. out.println("是否搜索到" + 48 + ":" + isFind);

System. out.println("\n进行排序:" );
   tree.sort();
 }
}

前序遍历:


[50][35][27][45][40][48][78][56][90]

中序遍历:


[27][35][40][45][48][50][56][78][90]

后序遍历:


[27][40][48][45][35][56][90][78][50]

开始搜索:

共搜索3次

是否搜索到48:true

进行排序:


[27][35][40][45][48][50][56][78][90]

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:https://my.oschina.net/u/1037605/blog/775018

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com