zoukankan      html  css  js  c++  java
  • php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误)

    php实现把二叉树打印成多行(谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

    一、总结

    要点:a、层次遍历(队列)  b、层次遍历中的层次(孩子在父亲的层次上面加1)

    另外一种:

    1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while

    谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

    二、php实现把二叉树打印成多行

    题目描述:

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

    三、代码

    代码一:

     1 链接:https://www.nowcoder.com/questionTerminal/445c44d982d04483b04a54f298796288
     2 来源:牛客网
     3 
     4 层次遍历
     5  
     6 class Solution {
     7 public:
     8         vector<vector<int> > Print(TreeNode* pRoot) {
     9             vector<vector<int> > vec;
    10             if(pRoot == NULL) return vec;
    11  
    12             queue<TreeNode*> q;
    13             q.push(pRoot);
    14  
    15             while(!q.empty())
    16             {
    17                 int lo = 0, hi = q.size();
    18                 vector<int> c;
    19                 while(lo++ < hi)
    20                 {
    21                     TreeNode *t = q.front();
    22                     q.pop();
    23                     c.push_back(t->val);
    24                     if(t->left) q.push(t->left);
    25                     if(t->right) q.push(t->right);
    26                 }
    27                 vec.push_back(c);
    28             }
    29             return vec;
    30         }
    31 };
     1 <?php
     2  
     3 /*class TreeNode{
     4     var $val;
     5     var $left = NULL;
     6     var $right = NULL;
     7     function __construct($val){
     8         $this->val = $val;
     9     }
    10 }*/
    11 function MyPrint($pRoot)
    12 {
    13     // write code here
    14     $q = new SplQueue();
    15     if(!$pRoot){
    16         return [];
    17     }
    18     $result = []; //1、$result[$i][]
    19     $i=0;
    20     $q->push($pRoot);
    21     while(!$q->isEmpty()){
    22         $count = $q->count(); //1、求每一层的时候:用的是计算开始时当前队列中元素的个数,用两层while
    23         while($count--){
    24             $t = $q->shift();
    25             if($t){
    26                 $result[$i][] = $t->val;
    27                 $q->push($t->left);
    28                 $q->push($t->right);
    29             }
    30         }
    31         $i++;
    32     }
    33     return $result;
    34 }

    代码二:谋而后动,写好算法思路,不然浪费超多时间而且还是错误代码,而且精力消耗会导致代码正确率下降以及低级错误

     1 <?php
     2 
     3 /*class TreeNode{
     4     var $val;
     5     var $left = NULL;
     6     var $right = NULL;
     7     function __construct($val){
     8         $this->val = $val;
     9     }
    10 }*/
    11 //算法:树的层次遍历(队列
    12 //这里每层一行输出,所以需要判断层次,所以每个节点加一个遍历判断层次即可
    13 function MyPrint($pRoot){
    14     if(!$pRoot) return [];
    15     $preCenci=1;
    16     $ansLine=array();
    17     $ans=array();
    18     $queue=array();//队列
    19     $queCenci=array();//队列层次
    20     array_push($queCenci,1);
    21     array_push($queue,$pRoot);
    22     while(!empty($queue)){
    23         $node=array_shift($queue);
    24         $cenci=array_shift($queCenci);
    25         if($cenci!=$preCenci){
    26             $ans[]=$ansLine;
    27             $ansLine=array();
    28             $ansLine[]=$node->val;
    29             $preCenci=$cenci;
    30         }else{
    31             $ansLine[]=$node->val;
    32             $preCenci=$cenci;
    33         }
    34         if($node->left) { array_push($queue,$node->left); array_push($queCenci,$cenci+1);}
    35         if($node->right) { array_push($queue,$node->right); array_push($queCenci,$cenci+1);} //1、这里写成了$queue
    36     }
    37     return $ans; //2、函数里面就是return,而不是echo
    38 }
  • 相关阅读:
    Lodop简短问答客户反馈篇 及排查步骤 及注册相关
    Win10图片打不开文件系统错误2147416359解决方法
    Lodop中特殊符号¥打印设计和预览不同
    LODOP安装参数 及静默安装
    LODOP打印安装到win的特殊字体
    Lodop打印设计(PRINT_DESIGN)介绍
    Lodop打印设计里的 打印项对齐
    System.out.println与System.err.println的区别(输出顺序!!!)
    享元模式
    Java中关于HashMap的元素遍历的顺序问题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9068535.html
Copyright © 2011-2022 走看看