二叉樹非遞迴遍曆

來源:互聯網
上載者:User

今天來review一下,直接上重點非遞迴(本篇借鑒不少,多謝諸位):

public class TreeNode {public int val;public TreeNode left;public TreeNode right;TreeNode(int x) {val = x;left = null;right = null;}    TreeNode(){};    public void setValue(int a) {    this.val=a;    }}


前序走訪 :

public ArrayList<Integer> preorderTraversal(TreeNode root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        TreeNode p=root;        ArrayList<Integer> a = new ArrayList<Integer>();        Stack<TreeNode> s = new Stack<TreeNode>();        while(p!=null||!s.isEmpty()) {        if(p!=null) {           a.add(p.val);           if(p.right!=null) s.push(p.right);           if(p.left!=null)  s.push(p.left);           p=null;                   }        if(!s.isEmpty()) {        p = s.pop();        }        }      return a;    }


中序遍曆

public ArrayList<Integer> inorderTraversal(TreeNode root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.          Stack<TreeNode> stack= new Stack<TreeNode>();       ArrayList<Integer> a = new ArrayList<Integer>();       TreeNode p=root;        while(!stack.isEmpty()||p!=null) {               if(p!=null)               {               stack.push(p);               p=p.left;               }               else{               p=stack.peek();               stack.pop();               a.add(p.val);               p=p.right;               }                     }return a;    }

後序遍曆

public ArrayList<Integer> postorderTraversal(TreeNode root) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.ArrayList<Integer> a = new ArrayList<Integer>();Stack<TreeNode> s = new Stack<TreeNode>();TreeNode cur = root;TreeNode pre = null;while (cur != null || !s.isEmpty()) {if (cur.left != null || cur.right != null) {  if (pre!=null&&(pre == cur.right || (pre == cur.left && cur.right == null))) {a.add(cur.val);pre = cur;} else {s.push(cur);if (cur.right != null)s.push(cur.right);if (cur.left != null)s.push(cur.left);}} else {a.add(cur.val);pre = cur;}if(!s.isEmpty())cur = s.pop();else    cur = null;}return a;}

層序遍曆

方法1:重新定義個新的Node結構,該結構包含level欄位。

class Node {TreeNode node;int level;Node() {}public Node(TreeNode n, int l) {node = n;level = l;}}public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {// IMPORTANT: Please reset any member data you declared, as// the same Solution instance will be reused for each test case.Queue<Node> queue = new LinkedList<Node>();ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> b = new ArrayList<Integer>();a.clear();if (root == null)return a;queue.offer(new Node(root, 0));int curlevel = -1;while (!queue.isEmpty()) {Node p = queue.poll();if (p.node.left != null) {queue.offer(new Node(p.node.left, p.level + 1));}if (p.node.right != null) {queue.offer(new Node(p.node.right, p.level + 1));}if (curlevel != p.level) {if (curlevel != -1)a.add(b);curlevel = p.level;b = new ArrayList<Integer>();b.add(p.node.val);} elseb.add(p.node.val);}a.add(b);return a;}

方法2:在每行結束加入一個null元素作為一個flag來判斷是否為一個新的Level

public ArrayList<ArrayList<Integer>> levelOrder2(TreeNode root) {Queue<TreeNode> queue = new LinkedList<TreeNode>();ArrayList<ArrayList<Integer>> a = new ArrayList<ArrayList<Integer>>();ArrayList<Integer> b = new ArrayList<Integer>();queue.add(root);queue.add(null);while(!queue.isEmpty()) {TreeNode temp = queue.peek();if(temp!=null) {b.add(temp.val);if(temp.left!=null)queue.add(temp.left);if(temp.right!=null)queue.add(temp.right);queue.poll();}else {queue.poll();queue.add(null);a.add(b);b = new ArrayList<Integer>();}}return a;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.