二叉樹の最近のパブリックノード
1086 ワード
二叉ツリーでは、2つのサブノードの最近のパブリック親ノードが検索される.実装方法:まず、各サブノードのパスを見つけ、その後、2つの経路の最後の同じノードを比較し、最近のパブリック親ノードである.
二叉樹のデータ構造は以下の通りです.
二叉樹のデータ構造は以下の通りです.
typedef struct _node
{
char data;
struct _node* lchild;
struct _node* rchild;
}node;
サブノードのパスを検索し、リンクリストリストリストリストリストを利用して実現する.bool findNodePath(node* root, char elem, list<node*> &path)
{
if (!root) return false;
path.push_back(root);
if (elem==root->data) return true;
if(findNodePath(root->lchild,elem,path)) return true;
if(findNodePath(root->rchild,elem,path)) return true;
path.pop_back();
return false;
}
上記のfindNodePath関数を利用すれば、最近のパブリックノードが得られやすくなります.node* findNearestParent(node* root, char elem1, char elem2)
{
list<node*> path1,path2;
if (findNodePath(root,elem1,path1)&&findNodePath(root,elem2,path2))
{
list<node*>::iterator iter1=path1.begin();
list<node*>::iterator iter2=path2.begin();
while(*iter1==*iter2)
{
iter1++;
iter2++;
}
return *(--iter1);
}
return NULL;
}