算法数据结构学习-Java实现二叉树的深度和广度优先遍历

算法数据结构学习-Java实现二叉树的深度和广度优先遍历_第1张图片

测试代码:

public static void main(String[] args) {
    TreeNode n0 = new TreeNode("G");
    TreeNode n11 = new TreeNode("D");
    TreeNode n12 = new TreeNode("M");
    n0.left = n11;
    n0.right = n12;
    TreeNode n21 = new TreeNode("A");
    TreeNode n22 = new TreeNode("F");
    n11.left = n21;
    n11.right = n22;
    TreeNode n23 = new TreeNode("H");
    TreeNode n24 = new TreeNode("Z");
    n12.left = n23;
    n12.right = n24;
    TreeNode n31 = new TreeNode("E");
    n22.left = n31;
    preOrderTreverse(n0);
}

 

一、深度优先遍历的实现(前序、中序、后序) 

1、前序遍历 

  访问顺序:先根节点,再左子树,最后右子树;上图的访问结果为:GDAFEMHZ

      

public static void preOrderTreverse(TreeNode root) {
        if (root == null) {
            return;
        }
        Stack stack = new Stack<>();

        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode temp = stack.peek();
            System.out.print(temp.value + "\t");
            stack.pop();
            if (temp.right != null) {
                stack.push(temp.right);
            }
            if (temp.left != null) {
                stack.push(temp.left);
            }
        }
    }

二、广度优先遍历

public void levelOrderTraverse(TreeNode root) {

   if(root == null){
			return;
		}
		ArrayList queue = new ArrayList<>();
		queue.add(root);
		while(queue.size() > 0){
			TreeNode temp = queue.get(0);
			queue.remove(0);
			System.out.print(temp.value+"\t");
			if(temp.left != null){
				queue.add(temp.left);
			}
			if(temp.right != null){
				queue.add(temp.right);
			}
		}
	}
}

 

     

 

 

 

你可能感兴趣的:(java)