标签:
#ifndef THELAST_COM_PARENT_H
#define THELAST_COM_PARENT_H
#include"reconstructBinaryTree.h"
bool isInsubTree(TreeNode *node,int n_val);
TreeNode *lastestCommParent(TreeNode *root,int n_val1 ,int n_val2){
if(root==NULL){
return NULL;
}
if(isInsubTree(root->left,n_val1)&&isInsubTree(root->right,n_val2)){
return root;
}
if(isInsubTree(root->left,n_val2)&&isInsubTree(root->right,n_val1)){
return root;
}
if(isInsubTree(root->left,n_val1)&&isInsubTree(root->left,n_val2)){
return lastestCommParent(root->left,n_val1,n_val2);
}
if(isInsubTree(root->right,n_val1)&&isInsubTree(root->right,n_val2)){
return lastestCommParent(root->right,n_val1,n_val2);
}
}
bool isInsubTree(TreeNode *node,int n_val){
if(node==NULL){
return false;
}
if(node->val==n_val){
return true;
}
return isInsubTree(node->left,n_val)||isInsubTree(node->right,n_val);
}
#endif
bool isInsubTree(TreeNode *node,int n_val)
这个函数的目的是确定n_val有没有在以node为根的子树中,如果在返回为true,否则返回false.
//如果n_val1和n_val2分别在左右子树中,那正好。
if(isInsubTree(root->left,n_val1)&&isInsubTree(root->right,n_val2)){
return root;
}
if(isInsubTree(root->left,n_val2)&&isInsubTree(root->right,n_val1)){
return root;
}
//如果两个节点都在左子树中,那么往左树中走
if(isInsubTree(root->left,n_val1)&&isInsubTree(root->left,n_val2)){
return lastestCommParent(root->left,n_val1,n_val2);
}
//如果两个节点都在右子树中,那么往右子树走
if(isInsubTree(root->right,n_val1)&&isInsubTree(root->right,n_val2)){
return lastestCommParent(root->right,n_val1,n_val2);
}
bool isInsubTree(TreeNode *node,int n_val){
if(node==NULL){
return false;
}
if(node->val==n_val){
return true;
}
//这里只能这么写,因为我们只要出现一个true只写了啊,也就是这个节点只要出现一次就OK了,于是用“或”
//要认真考虑递归的返回值,确保下一给的结果能反馈给上一给的程序,这样一级级从上往上返回,直到第一级
//第一级也就是直接影响我们整个程序返回值的。
return isInsubTree(node->left,n_val)||isInsubTree(node->right,n_val);
}
标签:
原文地址:http://www.cnblogs.com/yml435/p/4657703.html