先序遍歷-遞迴和非遞迴(java版)
阿新 • • 發佈:2018-11-21
用輔助棧就行儲存。
import java.util.Stack; class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } public class Main { //先序遍歷遞迴演算法 public static void preOrder(TreeNode root) { if(root == null)return; System.out.print(root.val+" "); preOrder(root.left); preOrder(root.right); } //先序遍歷非遞迴演算法 public static void preOrder2(TreeNode root) { if(root==null)return; Stack<TreeNode> q =new Stack<TreeNode>(); q.add(root); while(q.isEmpty()==false) { TreeNode tn = q.pop(); System.out.print(tn.val +" ");//Visit(root) if(tn.right!=null)q.add(tn.right);//注意是right元素先進棧 if(tn.left!=null)q.add(tn.left); } } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); root.right.right = new TreeNode(7); preOrder(root); } }