Java二叉查找代码_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]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值