二叉树的前序遍历、中序遍历、后序遍历、深度优先搜索、广度优先搜索

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

前序遍历(Pre-order)

public void preorder(TreeNode root) {
	if(root != null){
		System.out.println(root.val);
		preorder(root.left);
		preorder(root.right);
	}
}

中序遍历(In-order)

public void inorder(TreeNode root) {
	if(root != null){
		inorder(root.left);
		System.out.println(root.val);
		inorder(root.right);
	}
}

后序遍历(Post-order)

public void postorder(TreeNode root) {
	if(root != null){
		postorder(root.left);
		postorder(root.right);
		System.out.println(root.val);
	}
}

广度优先搜索(BFS)

广度优先搜索(Breadth-First-Search)从根节点开始,一层一层的访问,比较符合直观想法。
使用队列先进先出的特性,访问某一层节点后,将此层节点出队,将其子节点依次入队。如此循环。

public void BFS(TreeNode root){
	if (root == null) {  
		return;  
    }  
    LinkedList<TreeNode> queue = new LinkedList<>();  
    queue.offer(root);  
    while (!queue.isEmpty()) {  
    	TreeNode node = queue.poll();  
	    System.out.println(node.val);  
    	if (node.left != null)
	    	queue.offer(node.left);  
        if (node.right != null)
        	queue.offer(node.right); 
    }  
}

深度优先搜索(DFS)

深度优先搜索(Depth-First-Search)符合计算机的处理方式,使用栈结构。

public void BFS(TreeNode root){
	if (root == null) {  
		return;  
    }  
    LinkedList<TreeNode> stack = new LinkedList<>();  
    stack.push(root);
    while(!stack.isEmpty()){
    	TreeNode node = stack.pop();
    	system.out.println(node.val);
    	if(node.right!=null)
    		stack.push(node.right);
    	if(node.left!=null)
    		stack.push(node.left);
    }  
}

参考连接:https://leetcode.com/problems/validate-binary-search-tree/solution/

你可能感兴趣的:(算法与数据结构)