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;

  }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值