您的位置:首页 > 其它

二叉树中两个子节点的最近公共节点

2011-08-25 17:27 169 查看
求二叉树中两个子节点的最近公共节点

// 树节点
struct node
{
struct node* left;
struct node* right;
int val;
node(int t=0)
{
val = t;
left = 0;
right = 0;
}
};

typedef struct node* link;

// 构造树
void insert_tree(link &h, int t)
{
if (0 == h)
{
h = new node(t);
return;
}

if (t < h->val) insert_tree(h->left, t);
else insert_tree(h->right, t);
}

// 找最近公共节点,保存在ans中
bool descend(link &root, link &pre, link &ans, int v1, int v2)
{
if (root == 0) return false;
bool mid = (root->val == v1) || (root->val == v2);
bool left = descend(root->left, root, ans, v1, v2);
bool right = descend(root->right, root, ans, v1, v2);

if (mid && (left || right)) ans = pre;
else if (left && right) ans = root;

return mid || left || right;
}

int _tmain(int argc, _TCHAR* argv[])
{
link h = 0;
link pre=0, ans=0;
insert_tree(h, 5);
insert_tree(h, 4);
insert_tree(h, 6);
insert_tree(h, 3);
insert_tree(h, 7);
insert_tree(h, 8);
descend(h, pre, ans, 7, 8);

if (ans !=0)
cout<< ans->val <<endl;
else
cout<< "no"<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: