亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

二叉樹中兩個節點的最近公共祖先節點

發布時間:2020-07-06 14:13:45 來源:網絡 閱讀:860 作者:pure夢 欄目:編程語言
#include <iostream>
using namespace std;
template<class T>
struct BinaryTreeNode
{
                BinaryTreeNode< T>(const T& data)
                                :_data( data)
                                ,_left( NULL)
                                ,_right( NULL)
                {}
                 T _data;
                 BinaryTreeNode<T >* _left;
                 BinaryTreeNode<T >* _right;
};
template<class T>
class BinaryTree
{
public:
                BinaryTree< T>()
                                :_root( NULL)
                {}
                BinaryTree< T>(const T* a, size_t size)
                {
                                 size_t index = 0;
                                _root = CreateTree( a, index, size );
                }
                 BinaryTreeNode<T >* FindGFather(int n1, int n2)
                {
                                 return _FindGFather(_root, n1 , n2);
                }
                 void PreOrder()
                {
                                _PreOrder(_root);
                                cout<<endl;
                }
protected:
                 BinaryTreeNode<T >* CreateTree(const T* a, size_t& index, size_t size)
                {
                                 BinaryTreeNode<T >* root = NULL;
                                 if ((index < size) && ( a[index ] != '#'))
                                {
                                                root= new BinaryTreeNode <T>(a[index]);
                                                root->_left=CreateTree( a, ++index , size);
                                                root->_right=CreateTree( a, ++index , size);
                                }
                                 return root;
                }
                 //看數字n在不在root這棵樹里邊
                 bool IsOfTree(BinaryTreeNode <T>* root, int n)
                {
                                 if(root ==NULL)
                                                 return false ;
                                 else if (root->_data== n)
                                                 return true ;
                                 else
                                                 return (IsOfTree(root ->_left,n) || IsOfTree( root->_right, n ));
                }
                 BinaryTreeNode<T >* _FindGFather(BinaryTreeNode< T>* root , int n1, int n2)
                {
                                 if(IsOfTree(root , n1) && IsOfTree( root, n2 ))  //n1和n2都在這棵樹里邊,繼續往下
                                {
                                                 if(IsOfTree(root ->_left, n1) && (IsOfTree( root->_left, n2 )))
                                                                 return _FindGFather(root ->_left, n1, n2);
                                                 else if (IsOfTree(root->_right, n1) && (root ->_right, n2))
                                                                 return _FindGFather(root ->_right, n1, n2);
                                                 else
                                                                 return root ;  //n1和n2在不同的子樹里邊,返回上一級;或者n1是n2的父親(n2是n1的父親),就返回父親的值
                                }
                                 else
                                                 return NULL ;
                }
                 void _PreOrder(BinaryTreeNode <T>* root)
                {
                                 if(root ==NULL)
                                                 return;
                                cout<< root->_data<<" " ;
                                _PreOrder( root->_left);
                                _PreOrder( root->_right);
                }
protected:
                 BinaryTreeNode<T >* _root;
};
void test()
{
                 int arr[]={20, 18, 21, '#' , '#', 5, 7, '#', 3, '#' ,'#', 12, '#', '#' , 6};
                 BinaryTree<int > t(arr,sizeof(arr)/ sizeof(arr[0]));
                t.PreOrder();
                 BinaryTreeNode<int >* ret = t.FindGFather(21, 12);
                cout<<ret->_data<<endl;
}
int main()
{
                test();
                system( "pause");
                 return 0;
}

二叉樹中兩個節點的最近公共祖先節點

二叉樹中兩個節點的最近公共祖先節點


二叉樹中兩個節點的最近公共祖先節點




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

顺义区| 闵行区| 闸北区| 邳州市| 凤阳县| 平南县| 团风县| 方正县| 陕西省| 玉田县| 毕节市| 澎湖县| 武夷山市| 泾川县| 韶山市| 赤水市| 台湾省| 五寨县| 浦东新区| 齐河县| 云霄县| 呼玛县| 驻马店市| 东安县| 信阳市| 龙泉市| 永年县| 河西区| 增城市| 酉阳| 台山市| 武清区| 阳朔县| 龙胜| 禹州市| 东乡族自治县| 手游| 吉安县| 彭山县| 车致| 平陆县|