二叉树的遍历---递归与非递归--java

public class Main {
	static List<Integer> res = new ArrayList<Integer>();


	public static void preOrderRecusive(TreeNode node) {
		if (node == null) return;
		res.add(node.val);
		preOrderRecusive(node.left);
		preOrderRecusive(node.right);
	}
	
	public static void preOrderNonRecusive(TreeNode node) {
		Stack<TreeNode> s = new Stack<TreeNode>();
		TreeNode cur = node;
		while (cur != null || !s.isEmpty()) {
			while (cur != null) {
				res.add(cur.val);
				s.push(cur);
				cur = cur.left;
			}
			cur = s.pop();
			cur = cur.right;
		}
	}
	
	public static void inOrderRecusive(TreeNode node) {
		if (node == null) return;
		inOrderRecusive(node.left);
		res.add(node.val);
		inOrderRecusive(node.right);
	}
	
	public static void inOrderNonRecusive(TreeNode node) {
		Stack<TreeNode> s = new Stack<TreeNode>();
		TreeNode cur = node;
		while (cur != null || !s.isEmpty()) {
			while (cur != null) {
				s.push(cur);
				cur = cur.left;
			}
			cur = s.pop();
			res.add(cur.val);
			cur = cur.right;
		}
	}
	
	public static void postOrderRecusive(TreeNode node) {
		if (node == null) return;
		postOrderRecusive(node.left);
		postOrderRecusive(node.right);
		res.add(node.val);
	}
	
	public static void postOrderNonRecusive(TreeNode node) {
		Stack<TreeNode> s = new Stack<TreeNode>();
		TreeNode cur = node, last = null;
		while (cur != null || !s.isEmpty()) {
			while (cur != null) {
				s.push(cur);
				cur = cur.left;
			}
			cur = s.peek();
			if (cur.right == null || cur.right == last) {
				res.add(cur.val);
				s.pop();
				last = cur;
				cur = null;
			} else {
				cur = cur.right;
			}
		}
	}
    
    public static void levelOrder(TreeNode node) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.offer(node);
        while (!queue.isEmpty()) {
            TreeNode cur = queue.poll();
            res.add(cur.val);
            if (cur.left != null) queue.offer(cur.left);
            if (cur.right != null) queue.offer(cur.right);
        }
    }
	
	public static void print(List<Integer> list) {
		for (int i : list)
			System.out.print(i + "\t");
		System.out.println();
	}
	public static void main(String[] args) {
		TreeNode node4 = new TreeNode(4);
		TreeNode node2 = new TreeNode(2);
		TreeNode node6 = new TreeNode(6);
		TreeNode node1 = new TreeNode(1);
		TreeNode node3 = new TreeNode(3);
		TreeNode node5 = new TreeNode(5);
		TreeNode node7 = new TreeNode(7);
		node4.left  = node2;
		node4.right = node6;
		node2.left  = node1;
		node2.right = node3;
		node6.left  = node5;
		node6.right = node7;
		//preOrderRecusive(node4);
		//preOrderNonRecusive(node4);
		//inOrderRecusive(node4);
		//inOrderNonRecusive(node4); 
		//postOrderRecusive(node4);
		postOrderNonRecusive(node4);
		print(res);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_39590058/article/details/88701766