Esempio n. 1
0
		int treeLevel(TreeNode* root) {
			if (root == NULL) {
				return 0;
			} else {
				return max(treeLevel(root->left), treeLevel(root->right)) + 1;
			}
		}
Esempio n. 2
0
double ps_rec_write_tree_owner(PASTIX_INT nodenum, PASTIX_INT *ownertab, const CostMatrix *costmtx, const EliminTree *etree, FILE *out,
                            void (*ps_draw_node)(FILE *out, PASTIX_INT nodenum, PASTIX_INT procnum, const CostMatrix *costmtx,
                                                const EliminTree *etree, double s,
                                                double x, double y))
{
  static PASTIX_INT cx;
  PASTIX_INT nodelevel;
  double pos=0, lpos=0, rpos=0;
  double s, sy;

  nodelevel = nodeTreeLevel(nodenum, etree);

  sy= 1.4*500.0/treeLevel(etree);
  s= 500.0/treeLeaveNbr(etree);

  if (nodenum == ROOT(etree))
    {
      cx= 0;
    }

  pos= 0;

  /* draw sons */
  switch (etree->nodetab[nodenum].sonsnbr)
    {
    case 2:
      {
        rpos= ps_rec_write_tree_owner(TSON(etree, nodenum, 1), ownertab, costmtx, etree, out, ps_draw_node);
        pos+= rpos;
      }
    case 1:
      {
        lpos= ps_rec_write_tree_owner(TSON(etree, nodenum, 0), ownertab, costmtx, etree, out, ps_draw_node);
        pos+= lpos;
        pos/= etree->nodetab[nodenum].sonsnbr;
        break;
      }
    case 0:
      {
        pos= (double)cx;
        cx++;
        break;
      }
    default:
      {
          errorPrint("Erreur dans l'arbre d'elimination \n\tCblk %ld sonsnbr %ld \n\tAttention on ne peut imprimer l'arbre d'elimination que pour les grilles !!", (long)nodenum, (long)(etree->nodetab[nodenum].sonsnbr));
          EXIT(MOD_BLEND,INTERNAL_ERR);
      }
    }

  /* draw links to sons */
  switch (etree->nodetab[nodenum].sonsnbr)
    {
    case 2:
      {
        fprintf(out, "np %f %f m %f %f l %f %f l sk\n",
                lpos*s, (nodelevel+1)*sy,
                pos*s, nodelevel*sy,
                rpos*s, (nodelevel+1)*sy);
        break;
      }
    case 1:
      {
        fprintf(out, "np %f %f m %f %f l sk\n",
                lpos*s, (nodelevel+1)*sy,
                pos*s, (nodelevel)*sy);
        break;
      }
    }


  ps_draw_node_owner(out, nodenum, ownertab[nodenum], costmtx, etree, sy, pos*s,
               sy*nodelevel);

  return pos;
}
Esempio n. 3
0
		vector<vector<int>> levelOrderBottom(TreeNode* root) {
			int level = treeLevel(root);
			vector<vector<int>> result(level, vector<int>());
			dfs(root, result, level - 1);
			return result;
		}