Exemplo n.º 1
0
Arquivo: arbin.c Projeto: cmin764/cmiN
void tree_dfs(Node node, int mode)
{
    /**
     * Printeaza arborele in functie de mod:
     *     0 - preordine
     *     1 - inordine
     *     2 - postordine
     */
    if (!node)
        return;
    if (mode == 0)
        printf("%c ", node->key);
    tree_dfs(node->left, mode);
    if (mode == 1)
        printf("%c ", node->key);
    tree_dfs(node->right, mode);
    if (mode == 2)
        printf("%c ", node->key);
}
Exemplo n.º 2
0
  /*
   * Checks if the given decomposition constitutes a tree using DFS
   */
  bool is_tree() {
    if ((num_vertices > 0) && num_vertices - 1 != num_edges) {
      return false;
    } else if (num_vertices == 0) {
      return (num_edges == 0);
    }

    std::vector<int> seen(num_vertices, 0);
    unsigned seen_size = 0;

    bool cycle = !tree_dfs(seen,0,-1,seen_size);
    if (cycle || seen_size != num_vertices) {
      return false;
    }
    return true;
  }
Exemplo n.º 3
0
  /*
   * Helper method for is_tree(); not to be called from outside of the class
   */
  bool tree_dfs(std::vector<int>& seen, unsigned root, unsigned parent, unsigned& num_seen) {
    if (seen[root] != 0) {
      return false;
    }

    seen[root] = 1;
    num_seen++;

    for (auto it = adj_list[root].begin(); it != adj_list[root].end(); it++) {
      if (*it != parent) {
        if (!tree_dfs(seen, *it, root,num_seen)) {
          return false;
        }
      }
    }
    return true;
  }