質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • C

    3814questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • データ構造

    48questions

    データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

二分木の深さを求める

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,927

nnryu

score 30

#include <stdio.h>
typedef struct node{
struct node *left;
struct node *right;
int data;
}NODE;

NODE *insert(NODE *tree,int x){
if(tree==NULL){
tree =(NODE *)malloc(size of(NODE));
tree->left =NULL; tree->right =NULL; tree->data=x;
}else if(x<tree->data) tree->left = insert(tree->left,x);
else tree->right = insert(tree->right,x);
return tree;
}

int maxDepth(NODE *tree){
if(tree==NULL) { return(-1); }
else {
if(.........)
return.........;
else return.........;
}
}
というプログラムで二分木の深さMaxDepthを求めたいのですが.......の部分が解りません。
どなたかよろしくお願いします。


皆様回答ありがとうございます。
確かに皆様のコードで実現可能なのですが、このプログラムは穴抜きの問題でして、......以外の部分には書けないのです。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+1

参考情報:
 - 2分探索木の高さを求めるプログラム http://okwave.jp/qa/q6915723.html
 
つまり、
* if(p==NULL){ return 0; } とする。
  * max(右の子要素の深さ, 左の子要素の深さ) + 1 して、その要素の深さを求めるように再帰で計算する。
 で計算できるとおもいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

コメントで補足しましたが、以下のような形で実装できないでしょうか?

int maxDepth(NODE *tree){
if(tree==NULL) { return(-1); }
else {
/* 右の深さと左の深さを比較 */
if(.........)
/* 右の深さが大きい場合は、右の深さ+1 */
return.........;
/* 左の深さが大きい場合は、左の深さ+1 */
else return.........;
}
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

こういうふうに書いたら、分からないですかね。

int maxDepth(NODE *tree){
  if(tree==NULL) { return(-1); }
  else {
    int leftDepth = ....;
    int rightDepth = ....;
    if( .... )
      return .........;
    else
      return .........;
  }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

  • 解決済

    ruby にて "no method error"が出ます

    ruby にて2分木を作るアルゴリズムを書いています(参考:紀平拓男、春日伸弥「アルゴリズムとデータ構造」SoftbankCreative)まず Binary_Tree_Node 

  • 受付中

    高速で省メモリな複数配列のソート

    2つのキー配列と値配列をキー配列でソートしたいです。 なるべく余分なメモリを確保せずに高速にソートしたいです。 ソート部分は自分で書かずにstd::sortなどをつかいたいです。

  • 受付中

    C言語 二分木を生成する

    scanfで <<-,1,->,2,<-,3,->> と入力して、それを二分木にする関数を作っているんですが、scanfで読み込むために宣言したcharの配列buffを解析する関数

  • 解決済

    再帰関数に作りかえる

    値を二分探索木に挿入する関数insertを再帰関数に作りかえたいんですが、よくわからないので教えて欲しいです(><) int insert(struct node *node

  • 解決済

    c言語 2分木の探索

    前提・実現したいこと 関数int search_tree(int x, struct node *p)だけが空欄になっていて、これを埋めて2文木の中に入力した数字が含まれていれば

  • 解決済

    C言語の構造体で2分木を作るプログラムの実行時エラーの解決策を教えてください。

    初心者なので不備が多いかと思いますが、とりあえず動くようにしたいです。 自分でいろいろいじってみましたがどうしてもわかりません。 どこをどう直せばいいのかどなたかご教授お願い致

  • 受付中

    2分木のデータの追加

    前提・実現したいこと ■概要 0~n-1のn個のデータを、ツリー構造としてリスト化 (リスト化の方法) 操作: 0<=r<=1として、①②の場合分けによって右の子を見

  • 解決済

    Javaの二分木探索の挿入がうまくいかない

    前提・実現したいこと Java言語の初心者です. クラスの再帰を利用した2分木をで挿入・表示を行おうとしているのですが, 挿入がうまくできません. C言語では, 2分木を扱

同じタグがついた質問を見る

  • C

    3814questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

  • データ構造

    48questions

    データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)