C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

リーフノードがC++で接続されている特別な二分木の高さを見つけます


特別な二分木があり、そのリーフノードが接続されて循環二重リンクリストを形成しているとします。その高さを見つけなければなりません。したがって、左端のリーフの左ポインタは、循環二重リンクリストの前のポインタとして機能し、その右ポインタは、リンクリストの次のポインタとして機能します。

この場合、高さ検索戦略は通常の二分探索木に似ています。ノードの左右のサブツリーの高さを再帰的に計算し、ノードに高さを割り当てるのは、2つの子の最大値+1です。ただし、ここでは、葉は循環二重リンクリストの要素です。したがって、ノードがリーフノードになるために、ノードの左の右がノードを指しているかどうか、およびその右の左がノード自体を指しているかどうかを確認します。

#include<iostream>
using namespace std;
class Node {
   public:
      int data;
      Node *left, *right;
};
bool isLeafNode(Node* node) {
   return node->left && node->left->right == node && node->right && node->right->left == node;
}
int findHeight(Node* node) {
   if (node == NULL)
      return 0;
   if (isLeafNode(node))
      return 1;
   return 1 + max(findHeight(node->left), findHeight(node->right));
}
Node* getNode(int data) {
   Node* node = new Node;
   node->data = data;
   node->left = NULL;
   node->right = NULL;
   return node;
}
int main() {
   Node* root = getNode(1);
   root->left = getNode(2);
   root->right = getNode(3);
   root->left->left = getNode(4);
   root->left->right = getNode(5);
   root->left->left->left = getNode(6);
   Node *L1 = root->left->left->left;
   Node *L2 = root->left->right;
   Node *L3 = root->right;
   L1->right = L2, L2->right = L3, L3->right = L1;
   L3->left = L2, L2->left = L1, L1->left = L3;
   cout << "Height of tree is: " << findHeight(root);
}

出力

Height of tree is: 4

  1. C++の二分木で最も近い葉を見つけます

    1つの二分木が与えられたとします。さまざまなレベルのリーフノードがあります。ノードを指す別のポインターが与えられます。尖ったノードから最も近いリーフノードまでの距離を見つける必要があります。ツリーが以下のようであると考えてください- ここで、リーフノードは2、-2、および6です。ポインタがノード-5を指している場合、-5から最も近いノードは距離1になります。 これを解決するために、指定されたノードをルートとするサブツリーをトラバースし、サブツリー内で最も近いリーフを見つけて、距離を保存します。ここで、ルートからツリーをトラバースします。ノードxが左側のサブツリーに存在する場合は、右側

  2. C ++プログラミングでリーフノードになるので、バイナリツリーのノードを出力します。

    二分木が与えられた場合、その葉のノードを印刷してから、それらの葉のノードを削除してから、ツリーにノードがなくなるまで繰り返す必要があります。 例 したがって、問題の出力は-になります。 6 7 9 13 143 421 アプローチ DFSを適用するアプローチを採用しています。 一時的な値を適用するには、すべての値にゼロを割り当ててから、すべてのノードに値 maximum(両方の子の値)+1を割り当てます。 。 アルゴリズム right =NULL、return(node)FUNCTION void postod(struct Node * node、v