LintCode 480-二叉樹的所有路徑

後序遍歷非遞歸,當遍歷到葉子結點時,將棧中所有的內容都按照格式要求生成列表返回。

 static List<String> ret=new ArrayList<>();//全局變量

  static public List<String> binaryTreePaths(TreeNode root) {
      // write your code here
      if(root==null) return ret;
      Stack<TreeNode> sta=new Stack<>();

      TreeNode p=root;
      TreeNode pre=null;//後序遍歷非遞歸要用到一個pre指針
      while(p!=null||!sta.isEmpty()){

          if(p!=null)
          {
              sta.push(p);
              p=p.left;
          }
          else {
              p=sta.peek();//看一下最後一個節點的有節點有沒有訪問過
              if(p.right!=null&&pre!=p.right){
                  p=p.right;
              }
              else{
                  p=sta.pop();
                    //處理棧中所有的數據
                  if(p.left==null&&p.right==null){
                      String a="";
                      for (TreeNode t:sta
                           ) {
                          a=a+"->"+t.val;

                      }
                      a+="->"+p.val;
                      a=a.substring(2,a.length());
                      ret.add(a);
                  }

                  pre=p;
                  p=null;
              }
          }
      }

return ret;

  }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章