二叉树遍历(前序、中序、后序)-Java实现

 

1、前序遍历node

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

  1)递归实现spa

public void preOrderTraverse1(TreeNode root) { if (root != null) { System.out.print(root.val + "->"); preOrderTraverse1(root.left); preOrderTraverse1(root.right); } }

  2)非递归实现3d

public void preOrderTraverse2(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode node = root; while (node != null || !stack.empty()) { if (node != null) { System.out.print(node.val + "->"); stack.push(node); node = node.left; } else { TreeNode tem = stack.pop(); node = tem.right; } } }

2、中序遍历code

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

  1)递归实现递归

public void inOrderTraverse(TreeNode root) { if (root != null) { inOrderTraverse(root.left); System.out.print(root.val + "->"); inOrderTraverse(root.right); } }

  2)非递归实现class

public void inOrderTraverse(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode node = root; while (node != null || !stack.isEmpty()) { if (node != null) { stack.push(node); node = node.left; } else { TreeNode tem = stack.pop(); System.out.print(tem.val + "->"); node = tem.right; } } }

3、后序遍历List

  访问顺序:先左子树,再右子树,最后根节点,上图的访问结果为:AEFDHZMG。遍历

  1)递归实现

public void postOrderTraverse(TreeNode root) { if (root != null) { postOrderTraverse(root.left); postOrderTraverse(root.right); System.out.print(root.val + "->"); } }

   2)非递归实现

public void postOrderTraverse(TreeNode root) { TreeNode cur, pre = null; Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.empty()) { cur = stack.peek(); if ((cur.left == null && cur.right == null) || (pre != null && (pre == cur.left || pre == cur.right))) { System.out.print(cur.val + "->"); stack.pop(); pre = cur; } else { if (cur.right != null) stack.push(cur.right); if (cur.left != null) stack.push(cur.left); } } }

 4、层次遍历

  访问结果:GDMAFHZE。

public void levelOrderTraverse(TreeNode root) { if (root == null) { return; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.add(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); System.out.print(node.val + "->"); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } }
相关文章
相关标签/搜索