leetcode 日经贴,Cpp code -Lowest Common Ancestor of a Binary Search Tree
2015-07-11 21:06
567 查看
Lowest Common Ancestor of a Binary
Search Tree
Search Tree
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { matchcnt = 0; if (!root || !p || !q) { return NULL; } return lca(root, p, q); } private: TreeNode* lca(TreeNode *r, TreeNode *p, TreeNode *q) { if (!r) { return NULL; } int a = matchcnt; TreeNode *ret = lca(r->left, p, q); if (ret) { return ret; } ret = lca(r->right, p, q); if (ret) { return ret; } if (r == p || r == q) { ++matchcnt; } if (a == 0 && matchcnt == 2) { return r; } return NULL; } int matchcnt; };
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if (!root || !p || !q) { return NULL; } if (p->val > q->val) { swap(p, q); } return lca(root, p, q); } private: TreeNode* lca(TreeNode *r, TreeNode *p, TreeNode *q) { if (!r) { return NULL; } if (r->val >= p->val && r->val <= q->val) { return r; } if (r->val < p->val) { return lca(r->right, p, q); } else { return lca(r->left, p, q); } } };
相关文章推荐
- c++内存管理
- C语言结构体(一)
- C++ Primer Plus 第2章 编程练习
- c语言
- C++完美实现Singleton模式
- 【C++】静态成员与单例模式
- C++中的inline函数
- C语言的复习
- C++11新增for循环遍历方法
- 拆除vs发展c++程序开发过程中产生的.ipch和.sdf文件的方法
- C++11变参模板
- c++ primer读书笔记-第十三章 复制控制
- c++uml关系总结(关联,聚合,组合,依赖。。。)
- C++ primer 5 笔记2 chapter 2 变量和基本类型(2.1~2.3)
- 用C++实现最小公倍数和最大公约数
- C++笔记(7):动态内存分配与释放函数
- c++primer要点-特殊工具与技术
- C++笔记(6):结构体
- C语言 交换两个变量的值的实现
- C++笔记(5):指针