二叉樹的中序遍歷(遞迴和非遞迴版本)
阿新 • • 發佈:2018-12-13
轉自來自微信公眾號,一個專注應屆生網際網路求職分享的公眾號,公眾號ID:“菜鳥名企夢”
難易程度:★★
重要性:★★★★★
樹結構是面試中的考察的重點,而樹的遍歷又是樹結構的基礎。中序遍歷的非遞迴版本要求重點理解掌握。
//先序遍歷,遞迴版本 public static ArrayList<Integer> preOrder(TreeNode root) { ArrayList<Integer> res = new ArrayList<Integer>(); Stack<TreeNode> s = new Stack<TreeNode>(); s.push(root); while (!s.isEmpty()) { TreeNode tem = s.pop();// 根節點出棧 // 把根節點加入結果集 前序遍歷順序:根、左,右 所以對應的進棧順序為:右、左(根節點進棧後馬上出棧了) res.add(tem.val); if (tem.right != null) s.push(tem.right); if (tem.left != null) s.push(tem.left); } return res; } /** * 先序遍歷,遞迴版本 * @param root * @return */ public static ArrayList<Integer> preOrder(TreeNode root){ ArrayList<Integer> res = new ArrayList<Integer>(); preOrder(root,res); return res; } private static void preOrder(TreeNode root,ArrayList<Integer> res) { if(root==null) return; res.add(root.val); preOrder(root.left); preOrder(root.right); }
轉自來自微信公眾號,一個專注應屆生網際網路求職分享的公眾號,公眾號ID:“菜鳥名企夢”