二叉树遍历(递归)

package com.wzs;

// 测试二叉树遍历,递归算法
public class TestBinaryTree {
	public static void main(String[] args) {
		Node<String> g = new Node<String>("G", null, null);
		Node<String> e = new Node<String>("E", null, null);
		Node<String> f = new Node<String>("F", null, null);
		Node<String> d = new Node<String>("D", null, g);
		Node<String> b = new Node<String>("B", d, e);
		Node<String> c = new Node<String>("C", null, f);
		Node<String> a = new Node<String>("A", b, c);

		System.out.println("生成的二叉树:");
		System.out.println("            A");
		System.out.println("            |     ");
		System.out.println("       |---------|");
		System.out.println("       B         C");
		System.out.println("       |         |");
		System.out.println("  |---------|     -----|");
		System.out.println("  D         E          F");
		System.out.println("  |");
		System.out.println("   ----|");
		System.out.println("       G");

		System.out.println("二叉树深度:" + BinaryTree.getDepth(a));

		System.out.print("前序遍历:");
		BinaryTree.priorderTraversal(a);
		System.out.println();

		System.out.print("中序遍历:");
		BinaryTree.inorderTraversal(a);
		System.out.println();

		System.out.print("后序遍历:");
		BinaryTree.postorderTraversal(a);
		System.out.println();
	}
}

// 二叉树
class BinaryTree {
	// 前序遍历
	static <T> void priorderTraversal(Node<T> node) {
		if (node != null) {
			visitNode(node);
			priorderTraversal(node.getLeftChild());
			priorderTraversal(node.getRightChild());
		}
	}

	// 中序遍历
	static <T> void inorderTraversal(Node<T> node) {
		if (node != null) {
			inorderTraversal(node.getLeftChild());
			visitNode(node);
			inorderTraversal(node.getRightChild());
		}
	}

	// 后序遍历
	static <T> void postorderTraversal(Node<T> node) {
		if (node != null) {
			postorderTraversal(node.getLeftChild());
			postorderTraversal(node.getRightChild());
			visitNode(node);
		}
	}

	// 二叉树深度
	static <T> int getDepth(Node<T> node) {
		if (node == null) {
			return 0;
		}
		int leftDepth = 0;
		int rightDepth = 0;
		leftDepth = getDepth(node.getLeftChild());
		rightDepth = getDepth(node.getRightChild());
		return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
	}

	// 访问节点
	static <T> void visitNode(Node<T> node) {
		System.out.print(node.getKey() + " ");
	}
}

// 节点
class Node<T> {
	private T key;
	private Node<T> leftChild;
	private Node<T> rightChild;

	public Node() {

	}

	public Node(T key, Node<T> leftChild, Node<T> rightChild) {
		super();
		this.key = key;
		this.leftChild = leftChild;
		this.rightChild = rightChild;
	}

	public T getKey() {
		return key;
	}

	public void setKey(T key) {
		this.key = key;
	}

	public Node<T> getLeftChild() {
		return leftChild;
	}

	public void setLeftChild(Node<T> leftChild) {
		this.leftChild = leftChild;
	}

	public Node<T> getRightChild() {
		return rightChild;
	}

	public void setRightChild(Node<T> rightChild) {
		this.rightChild = rightChild;
	}

}

输出结果:

生成的二叉树:
            A
            |     
       |---------|
       B         C
       |         |
  |---------|     -----|
  D         E          F
  |
   ----|
       G
二叉树深度:4
前序遍历:A B D G E C F 
中序遍历:D G B E A C F 
后序遍历:G D E B F C A 


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值