java递归遍历二叉树_【数据结构--二叉树】Java递归实现二叉树遍历

参考链接:https://www.cnblogs.com/yaobolove/p/6213936.html

这有一棵树:

66361bc54ee313040a9eb0ea801a2e05.png

1、节点对象

package com.tree.mybinarytree;

/**

* 二叉树TreeNode,每个node代表树中的一个节点

* @author ZX

* @date 2018年7月

*/

public class Node {

//左边子节点

private Node leftNode;

//右边子节点

private Node rightNode;

//节点数据

private String data;

//getset

public Node getLeftNode() {

return leftNode;

}

public void setLeftNode(Node leftNode) {

this.leftNode = leftNode;

}

public Node getRightNode() {

return rightNode;

}

public void setRightNode(Node rightNode) {

this.rightNode = rightNode;

}

public String getData() {

return data;

}

public void setData(String data) {

this.data = data;

}

//constructor

public Node() {}

public Node(Node leftNode,Node rightNode,String data) {

this.leftNode=leftNode;

this.rightNode=rightNode;

this.data=data;

}

}

2、测试类

package com.tree.mybinarytree;

/**

* 1、组装树 2、遍历树 3、测试

*

* @author zx

*

*/

public class TreeTest {

public static void main(String[] args) {

//按照图片组装树

Node G = new Node(null, null, "G");

Node F = new Node(null, null, "F");

Node E = new Node(null, null, "E");

Node D = new Node(null, null, "D");

Node C = new Node(F, G, "C");

Node B = new Node(D, E, "B");

Node A = new Node(B, C, "A");

//遍历

System.out.println("先序遍历");

theFirstTraversal(A);

System.out.println("");

System.out.println("中序遍历");

theInOrderTraversal(A);

System.out.println("");

System.out.println("后序遍历");

thePostOrderTraversal(A);

System.out.println("");

}

public static void printNode(Node node) {

System.out.print(node.getData());

}

/**

* 先序遍历

* @param root

*/

public static void theFirstTraversal(Node root) { // 先序遍历

printNode(root);

if (root.getLeftNode() != null) { // 使用递归进行遍历左孩子

theFirstTraversal(root.getLeftNode());

}

if (root.getRightNode() != null) { // 递归遍历右孩子

theFirstTraversal(root.getRightNode());

}

}

/**

* 中序遍历

* @param root

*/

public static void theInOrderTraversal(Node root) { // 中序遍历

if (root.getLeftNode() != null) {

theInOrderTraversal(root.getLeftNode());

}

printNode(root);

if (root.getRightNode() != null) {

theInOrderTraversal(root.getRightNode());

}

}

/**

* 后序遍历

* @param root

*/

public static void thePostOrderTraversal(Node root) { // 后序遍历

if (root.getLeftNode() != null) {

thePostOrderTraversal(root.getLeftNode());

}

if (root.getRightNode() != null) {

thePostOrderTraversal(root.getRightNode());

}

printNode(root);

}

}

由于二叉查找树可以任意构造,同样的值,可以构造出很少分支的二叉查找树,显然这棵二叉树的查询效率和顺序查找差不多。若想二叉查找数的查询性能最高,需要这棵二叉查找树是平衡的,也即平衡二叉树(AVL树)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值