質問: ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/5ee85dbd9d62c42524c76df6031c018b.jpeg) ![イメージ説明](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/99276225bc1fdcfa4c1786aa74f18a39.jpeg) こちら二つの 1 なぜ二つの子ノードを持つ場合は、削除ノードの左部分木から「最大」の数を探す必要があるのでしょうか? 最大でなくてもよいのではないでしょうか?(2など) 2 後半の next=*left 以降がなぜそのコードになるのか理解できません。 なぜそのコードになるのか解説をお願いします
回答: ノード部分の値を基準として 左は必ず小さい値 右には必ず大きい値 が入るというルールでやっているからです。 > > 1 なぜ二つの子ノードを持つ場合は、削除ノードの左部分木から「最大」の数を探す必要があるのでしょうか? > > 最大でなくてもよいのではないでしょうか?(2など) > > > 2などをやってしまうと、ルールに反することが明確です。 > > 2 後半の next=*left 以降がなぜそのコードになるのか理解できません。 > > なぜそのコードになるのか解説をお願いします > > > 付け替えてるのですが、ちょっと言葉で説明するのは難しいのですが `*left = (*left)->left`で4の位置に3を持ってくる `next->left = (*p)->left`と`next->right = (*p)->right`で4のleftとrightを5のleftとrightと差し替えてる感じです