二叉树遍历

扯犊子:具体的思路我就不写了,代码贴出来,如果有需要的话可以私聊

初级菜鸟,如果缺点望指出,多多沟通,有利于成长。

树的结构

public class TreeNode {
	int val;
	TreeNode left;
	TreeNode right;

	TreeNode(int x) {
		val = x;
	}
}


public class Demo_08 {
	
	// 深度
	public int maxDepth(TreeNode root) {
		if (root == null)
			return 0;
		else {
			int left = maxDepth(root.left);
			int right = maxDepth(root.right);
			return 1 + Math.max(left, right);
		}
	}

	public static void main(String[] args) {
		TreeNode t1 = new TreeNode(1);
		TreeNode t2 = new TreeNode(2);
		TreeNode t3 = new TreeNode(3);
		TreeNode t4 = new TreeNode(4);
		TreeNode t5 = new TreeNode(5);
		TreeNode t6 = new TreeNode(6);
		TreeNode t7 = new TreeNode(7);
		TreeNode t8 = new TreeNode(8);
		TreeNode t9 = new TreeNode(9);
		TreeNode t10 = new TreeNode(10);
		t1.left = t2;
		t1.right = t3;
		t2.left = t4;
		t2.right = t5;
		t3.left = t6;
		t3.right = t7;
		t5.left = t8;
		t5.right = t9;
		t9.left = t10;
		List<Integer> list = new ArrayList<Integer>();
		Demo_08 d = new Demo_08();
		list = d.postOrderBinary(t1, list);
		int i = d.maxDepth(t1);
		System.out.println(i);
		System.out.println(list);
		System.out.println(max);
	}

	/*
	 * 前序遍历 高度
	 */
	static int max = 0;

	public List<Integer> preOrderBinary(TreeNode root, List<Integer> list) {
		if (root == null)
			return list;
		TreeNode node = root;
		Stack<TreeNode> s = new Stack<TreeNode>();
		while (node != null || s.size() != 0) {
			while (node != null) {
				s.push(node);
				list.add(node.val);
				node = node.left;
			}
			if (s.size() > max)
				max = s.size();
			node = s.pop();
			node = node.right;
		}
		return list;
	}

	/*
	 * 中序遍历
	 */
	public List<Integer> inOrderBinary(TreeNode root, List<Integer> list) {
		if (root == null)
			return list;
		TreeNode node = root;
		Stack<TreeNode> s = new Stack<TreeNode>();
		while (node != null || s.size() != 0) {
			while (node != null) {
				s.push(node);
				node = node.left;
			}
			node = s.pop();
			list.add(node.val);
			node = node.right;
		}
		return list;
	}

	/*
	 * 后续遍历
	 */
	public List<Integer> postOrderBinary(TreeNode root, List<Integer> list) {
		if (root == null)
			return list;
		TreeNode node = root;
		Stack<TreeNode> s = new Stack<TreeNode>();
		Stack<Integer> f = new Stack<Integer>();
		int te = 0;
		while (node != null || s.size() != 0) {
			while (node != null) {
				s.push(node);
				f.push(1);
				node = node.left;
			}
			node = s.pop();
			te = f.pop();
			if (te == 1) {
				s.push(node);
				f.push(0);
				node = node.right;
			} else {
				list.add(node.val);
				node = null;
			}
		}
		return list;
	}

	/*
	 * 层次遍历
	 */
	public List<Integer> levelTraverseBinary(TreeNode root, List<Integer> list) {
		if (root == null)
			return list;
		TreeNode node = root;
		List<TreeNode> pNode = new ArrayList<TreeNode>();
		pNode.add(node);
		while (node != null && pNode.size() != 0) {
			node = pNode.remove(0);
			if (node != null)
				list.add(node.val);

			if (node.left != null)
				pNode.add(node.left);
			if (node.right != null)
				pNode.add(node.right);
		}
		return list;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值