#include <iostream>
using namespace std;
struct Node
{
Node(int i = 0, Node *pLeft = NULL, Node *pRight = NULL) : data(i), left(pLeft),
right(pRight) {}
Node *left;
Node *right;
int data;
};
Node *constructNode(Node **pNode1, Node **pNode2)
{
Node *node12 = new Node(12);
Node *node11 = new Node(11);
Node *node10 = new Node(10);
Node *node9 = new Node(9, NULL, node12);
Node *node8 = new Node(8, node11, NULL);
Node *node7 = new Node(7);
Node *node6 = new Node(6);
Node *node5 = new Node(5, node8, node9);
Node *node4 = new Node(4, node10);
Node *node3 = new Node(3, node6, node7);
Node *node2 = new Node(2, node4, node5);
Node *node1 = new Node(1, node2, node3);
*pNode1 = node6;
*pNode2 = node12;
return node1;
}
bool isNodeIn(Node *root, Node *node1, Node *node2)
{
if (node1 == NULL || node2 == NULL)
{
throw("invalid node1 and node2");
return false;
}
if (root == NULL)
return false;
if (root == node1 || root == node2)
{
return true;
}
else
{
return isNodeIn(root->left, node1, node2) || isNodeIn(root->right, node1, node2);
}
}
Node *lowestFarther(Node *root, Node *node1, Node *node2)
{
if (root == NULL || node1 == NULL || node2 == NULL || node1 == node2)
{
return NULL;
}
bool leftFlag = false;
bool rightFlag = false;
leftFlag = isNodeIn(root->left, node1, node2);
rightFlag = isNodeIn(root->right, node1, node2);
if (leftFlag == true && rightFlag == true)
{
return root;
}
else if (leftFlag == true)
{
return lowestFarther(root->left, node1, node2);
}
else
{
return lowestFarther(root->right, node1, node2);
}
}
void main()
{
Node *node1 = NULL;
Node *node2 = NULL;
Node *root = constructNode(&node1, &node2);
cout << "node1: " << node1->data << endl;
cout << "node2: " << node2->data << endl;
cout << "root: " << root->data << endl;
Node *father = lowestFarther(root, node1, node2);
if (father == NULL)
{
cout << "no common father" << endl;
}
else
{
cout << "father: " << father->data << endl;
}
}
#include <iostream>
using namespace std;
struct Node
{
Node(int i = 0, Node *pLeft = NULL, Node *pRight = NULL) : data(i),
left(pLeft), right(pRight) {}
int data;
Node *left;
Node *right;
};
Node *constructNode(Node **pNode1, Node **pNode2)
{
Node *node12 = new Node(12);
Node *node11 = new Node(11);
Node *node10 = new Node(10);
Node *node9 = new Node(9, NULL, node12);
Node *node8 = new Node(8, node11, NULL);
Node *node7 = new Node(7);
Node *node6 = new Node(6);
Node *node5 = new Node(5, node8, node9);
Node *node4 = new Node(4, node10);
Node *node3 = new Node(3, node6, node7);
Node *node2 = new Node(2, node4, node5);
Node *node1 = new Node(1, node2, node3);
*pNode1 = node6;
*pNode2 = node5;
return node1;
}
bool lowestFather(Node *root, Node *node1, Node *node2, Node *&dest)
{
if (root == NULL || node1 == NULL || node2 == NULL || node1 == node2)
return false;
if (root == node1 || root == node2)
return true;
bool leftFlag = lowestFather(root->left, node1, node2, dest);
bool rightFlag = lowestFather(root->right, node1, node2, dest);
if (leftFlag == true && rightFlag == true)
{
dest = root;
}
if (leftFlag == true || rightFlag == true)
return true;
}
int main()
{
Node *node1 = NULL;
Node *node2 = NULL;
Node *root = constructNode(&node1, &node2);
bool flag1 = false;
bool flag2 = false;
Node *dest = NULL;
bool flag = lowestFather(root, node1, node2, dest);
if (dest != NULL)
{
cout << "lowest common father: " << dest->data << endl;
}
else
{
cout << "no common father!" << endl;
}
return 0;
}
#include <iostream>
using namespace std;
struct Node
{
Node(int i = 0, Node *pLeft = NULL, Node *pRight = NULL) : data(i),
left(pLeft), right(pRight) {}
int data;
Node *left;
Node *right;
};
Node *constructNode(Node **pNode1, Node **pNode2)
{
Node *node12 = new Node(12);
Node *node11 = new Node(11);
Node *node10 = new Node(10);
Node *node9 = new Node(9, NULL, node12);
Node *node8 = new Node(8, node11, NULL);
Node *node7 = new Node(7);
Node *node6 = new Node(6);
Node *node5 = new Node(5, node8, node9);
Node *node4 = new Node(4, node10);
Node *node3 = new Node(3, node6, node7);
Node *node2 = new Node(2, node4, node5);
Node *node1 = new Node(1, node2, node3);
*pNode1 = node11;
*pNode2 = node12;
return node1;
}
Node* lowestFather(Node *root, Node *node1, Node *node2)
{
if (root == NULL || node1 == NULL || node2 == NULL || node1 == node2)
return NULL;
if (root == node1 || root == node2)
return root;
Node* leftFlag = lowestFather(root->left, node1, node2);
Node* rightFlag = lowestFather(root->right, node1, node2);
if (leftFlag == NULL)
return rightFlag;
else if (rightFlag == NULL)
return leftFlag;
else
return root;
}
int main()
{
Node *node1 = NULL;
Node *node2 = NULL;
Node *root = constructNode(&node1, &node2);
bool flag1 = false;
bool flag2 = false;
Node *dest = NULL;
Node* flag = lowestFather(root, node1, node2);
if (flag != NULL)
{
cout << "lowest common father: " << flag->data << endl;
}
else
{
cout << "no common father!" << endl;
}
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有