Leetcode刷題之路(91-100)

94.二叉樹的中序遍歷

二叉樹的中序遍歷題目鏈接

  • 中序遍歷:左節點->頭節點->右節點
  • 方法一:遞歸法,很簡單直接按中序遍歷順序寫
List<Integer> results = new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
          if(root==null){
              return results;
          }
          inorderTraversal(root.left);
          results.add(root.val);
          inorderTraversal(root.right);
          return results;
    }
  • 方法二:迭代法
  • 先去找頭節點最左邊的葉子節點,再這個過程用棧來存儲沒利用到的節點,找到最左邊的葉子節點後,棧中彈出它,它是一個"頭節點",那麼現在我們需要訪問它的"右節點",如果有就去訪問這個節點下的最左邊的葉子節點,重複上邊步驟,如果“右節點”不存在就讓棧彈出棧頂元素進行下一輪的遍歷
	List<Integer> results;
    public List<Integer> inorderTraversal(TreeNode root) {
        results = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        TreeNode p = root;
        while(p!=null||!stack.isEmpty()){//這個條件是判斷棧頂彈出的節點沒有右節點的情況,p就爲空了,讓棧頂彈出新的節點
             while(p!=null){
                 stack.push(p);
                 p=p.left;
             }
             if(!stack.isEmpty()){
                 p=stack.pop();
                 results.add(p.val);
                 p=p.right;
             }
        }
        return results;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章