欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-06 23:41:53
...

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


这有一棵树:

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

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树)