标签:


#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