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

二分探索木で最も低い共通祖先を見つけるためのC++プログラム


左の子と右の子として指定された、最大2つの子を持つ二分木。これは、バイナリツリーで最も低い共通の祖先を見つけるためのC++プログラムです。

アルゴリズム

Begin Create a structure n to declare data d, a left child pointer l and a right child pointer r.
   Create a function to create newnode. Call a function LCA() to Find lowest common ancestor in a binary tree:
   Assume node n1 and n2 present in the tree.
   If root is null, then return.
      If root is not null there are two cases.
         a) If both n1 and n2 are smaller than root, then LCA lies in left.
         b) If both n1 and n2 are greater than root, then LCA lies in right.
End.

サンプルコード

#include<iostream>
using namespace std;
struct n {
   int d;
   struct n* l, *r;
}*p = NULL;
struct n* newnode(int d) {
   p = new n;
   p->d= d;
   p->l = p->r = NULL;
   return(p);
}
struct n *LCA(struct n* root, int n1, int n2) {
   if (root == NULL)
      return NULL;
   if (root->d > n1 && root->d > n2)
      return LCA(root->l, n1, n2);
   if (root->d< n1 && root->d < n2)
      return LCA(root->r, n1, n2);
      return root;
}
int main() {
   n* root = newnode(9);
   root->l = newnode(7);
   root->r = newnode(10);
   root->l->l = newnode(6);
   root->r->l= newnode(8);
   root->r->r = newnode(19);
   root->r->l->r = newnode(4);
   root->r->r->r = newnode(20);
   int n1 = 20, n2 = 4;
   struct n *t = LCA(root, n1, n2);
   cout<<"Lowest Common Ancestor of 20 and 4 is:" <<t->d<<endl;
   n1 = 7, n2 = 6;
   t = LCA(root, n1, n2);
   cout<<"Lowest Common Ancestor of 7 and 6 is:" << t->d<<endl;
}

出力

Lowest Common Ancestor of 20 and 4 is:9
Lowest Common Ancestor of 7 and 6 is:7

  1. Pythonのバイナリツリーの最も低い共通の祖先

    二分木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[3,5,1,6,2,0,8、null、null、7,4]のような場合。ツリーは次のようになります- ここで、5と1のLCAは3です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用したル

  2. Pythonのバイナリ検索ツリーの最も低い共通の祖先

    二分探索木があるとします。与えられた2つのノードの中で最も低い共通の祖先ノードを見つける必要があります。 2つのノードpとqのLCAは、実際には、pとqの両方を子孫として持つツリーの最下位ノードです。したがって、二分木が[6、2、8、0、4、7、9、null、null、3、5]のような場合。ツリーは次のようになります- ここで、2と8のLCAは6です これを解決するには、次の手順に従います- ツリーが空の場合は、nullを返します pとqの両方がrootと同じ場合は、rootを返します left:=pとqを使用したルートの左側のサブツリーのLCA right:=pとqを使用し