遍历二叉树

遍历二叉树有很多种方式。大的范围分两种:横向遍历和纵向遍历(深度遍历)。纵向遍历又分为三种:前序,中序,后序。先遍历根接点是前序遍历,根接点中间遍历是中序遍历,根接点在后面遍历就是后续。如下图二叉树的前序,中序,后序遍历结果:


前序遍历结果为:

57,42,35,23,9,24,48,45,43,51,70,62,61,68,66,69,

72,78,77,91

中序遍历结果为:

9,23,24,35,42,43,45,48,51,57,61,62,66,68,69,70,

72,77,78,91

后序遍历结果为:

9,24,23,35,43,45,51,48,42,61,66,69,68,62,77,91,

78,72,70,57

也就是说该二叉树是按中序有序遍历的二叉树。

package com.itjob;

public class TreeNode {
	
	TreeNode leftNode;
	int data;
	TreeNode rightNode;
	
	public TreeNode(int nodeData) {
		data = nodeData;		 
	}
	
	public synchronized void insert(int insertValue) {		
		if (insertValue < data) {			
			if (leftNode == null)
				leftNode = new TreeNode(insertValue);
			else				
				leftNode.insert(insertValue);
		}else if (insertValue > data) {			
			if (rightNode == null)
				rightNode = new TreeNode(insertValue);
			else				
				rightNode.insert(insertValue);
		}
	} 
} 

package com.itjob;

public class MyTree {
	private TreeNode root;
	
	public MyTree() {
		root = null;
	}

	// 插入节点到树
	public synchronized void insertNode(int insertValue) {
		if (root == null)
			root = new TreeNode(insertValue); 
		else
			root.insert(insertValue);
	}

	// 开始先序遍历
	public synchronized void preorderTraversal() {
		preorderHelper(root);
	}

	// 执行先序遍历的方法
	private void preorderHelper(TreeNode node) {
		if (node == null)
			return;

		System.out.print(node.data + " ");
		preorderHelper(node.leftNode);
		preorderHelper(node.rightNode);
	}

	// 开始中序遍历
	public synchronized void inorderTraversal() {
		inorderHelper(root);
	}

	// 执行中序遍历的方法
	private void inorderHelper(TreeNode node) {
		if (node == null)
			return;

		inorderHelper(node.leftNode); 
		System.out.print(node.data + " ");
		inorderHelper(node.rightNode);
	}

	// 开始后序遍历
	public synchronized void postorderTraversal() {
		postorderHelper(root);
	}

	// 执行后序遍历的方法
	private void postorderHelper(TreeNode node) {
		if (node == null)
			return;

		postorderHelper(node.leftNode);
		postorderHelper(node.rightNode); 
		System.out.print(node.data + " "); 
	}
}

package com.itjob;

public class TreeTest {
	public static void main(String args[]) {
		MyTree tree = new MyTree();
		int value;

		System.out.println("Inserting the following values: ");

		// 插入10个0-99的随机数
		for (int i = 1; i <= 10; i++) {
			value = (int) (Math.random() * 100);
			System.out.print(value + " ");
			tree.insertNode(value);
		}

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

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

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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值