面试题50—树中两个节点的最低公共祖先
来源:互联网 发布:万销淘宝店铺装修工具 编辑:程序博客网 时间:2024/05/17 23:23
示例代码:
头文件:tree.h
#include<iostream>#include<vector>using namespace std;struct TreeNode{ char value; vector<TreeNode*> next;};TreeNode* CreateTreeNode(char data, int n);void ConnectTreeNode(TreeNode *parent, TreeNode *child, int n);void PrintTree(TreeNode *pRoot);void DestroyTree(TreeNode* pRoot);
源文件:tree.cpp
#include"tree.h"TreeNode* CreateTreeNode(char data,int n){ TreeNode *pRoot = new TreeNode(); pRoot->value = data; pRoot->next = vector<TreeNode*>(n, NULL); return pRoot;}void ConnectTreeNode(TreeNode *parent, TreeNode *child, int n){ if (parent != NULL) { parent->next[n-1] = child; }}void PrintTree(TreeNode *pRoot){ if (pRoot) { cout << pRoot->value << endl; for (int i = 0; i < pRoot->next.size(); i++) { if (pRoot->next[i]) { cout << pRoot->value << "第" << i + 1 << "个结点:" << pRoot->next[i]->value << endl; } } if (pRoot->next.size() == 0) { cout << pRoot->value << "没有子结点!"<< endl; } cout << endl; // for (int i = 0; i < pRoot->next.size(); i++) { PrintTree(pRoot->next[i]); } }}void DestroyTree(TreeNode* pRoot){ if (pRoot != NULL) { vector<TreeNode*> temp = pRoot->next; delete pRoot; for (int i = 0; i < temp.size(); i++) DestroyTree(temp[i]); pRoot = NULL; }}
主函数:main.cpp
//面试题50—树中两个节点的最低公共祖先//示例代码:#include<iostream>#include"tree.h"using namespace std;bool CommonParentNode(TreeNode *pRoot, TreeNode* node,vector<TreeNode*>&path){ if (pRoot == node) return true; path.push_back(pRoot); bool found = false; int i = 0; int n = pRoot->next.size(); while (!found&&i < n) { found = CommonParentNode(pRoot->next[i], node, path); i++; } if (!found) path.pop_back(); return found;}TreeNode* CommonParentNode(vector<TreeNode*>path1, vector<TreeNode*>path2){ int i = 0; int n1 = path1.size(); int n2 = path2.size(); while (i < n1&&i < n2) { if (path1[i] == path2[i]) i++; else break; } if (i == 0) { return NULL; } else { return path1[i - 1]; }}int main(){ TreeNode *p1 = CreateTreeNode('A', 2); TreeNode *p2 = CreateTreeNode('B', 2); TreeNode *p3 = CreateTreeNode('C', 0); TreeNode *p4 = CreateTreeNode('D', 2); TreeNode *p5 = CreateTreeNode('E', 3); TreeNode *p6 = CreateTreeNode('F', 0); TreeNode *p7 = CreateTreeNode('G', 0); TreeNode *p8 = CreateTreeNode('H', 0); TreeNode *p9 = CreateTreeNode('I', 0); TreeNode *p10 = CreateTreeNode('J', 0); // ConnectTreeNode(p1, p2, 1); ConnectTreeNode(p1, p3, 2); ConnectTreeNode(p2, p4, 1); ConnectTreeNode(p2, p5, 2); ConnectTreeNode(p4, p6, 1); ConnectTreeNode(p4, p7, 2); ConnectTreeNode(p5, p8, 1); ConnectTreeNode(p5, p9, 2); ConnectTreeNode(p5, p10, 3); //=== //PrintTree(p1); //=== vector<TreeNode*> path1; vector<TreeNode*>path2; bool found1 = CommonParentNode(p1, p4, path1); bool found2 = CommonParentNode(p1, p5, path2); for (int i = 0; i < path1.size(); i++) cout << path1[i]->value << ""; if (found1&&found2) { TreeNode *res = CommonParentNode(path1, path2); if (res) cout << "最低共同祖先结点:" << res->value << endl; else cout << "没有共同祖先结点!" << endl; } DestroyTree(p1);}
阅读全文
0 0
- 剑指offer 面试题50—树中两个节点的最低公共祖先
- 面试题50—树中两个节点的最低公共祖先
- [剑指offer][面试题50]树中两个节点的最低公共祖先
- 剑指Offer:面试题50 树中两个节点的最低公共祖先
- 面试题50 树中两个节点的最低公共祖先LCA(Lowest Common Ancestor )
- 面试题50:二叉树中两个节点的最低公共祖先
- 剑指offer 面试题50 树中两个节点的最低公共祖先
- 面试题50_树中两个节点的最低公共祖先
- 面试题50:树中两个节点的最低公共祖先
- 面试题50:树中两个节点的最低公共祖先
- 面试题之树中两个节点的最低公共祖先节点
- 二叉树相关面试题--树中两个节点的最低公共祖先
- 面试题54:树中两个节点的最低公共祖先
- 剑指offer——面试题50:树中两个结点的最低公共祖先
- 《剑指offer》面试题50 树中两个结点的最低公共祖先
- 面试题50:树中两个结点的最低公共祖先
- 《剑指Offer》学习笔记--面试题50:树中两个结点的最低公共祖先
- 【剑指offer】 面试题50: 树中两个结点的最低公共祖先
- java常用的设计模式
- Domain=NSURLErrorDomain Code=-1005 "未能完成操作。
- Qt TCP客户端无法连接服务器
- VimH,J,K,L的由来
- 网页打印(不使用插件的情况下)
- 面试题50—树中两个节点的最低公共祖先
- yii2安装后报The file or directory to be published does not exist:path/vendor/bower/jquery/dist的问题
- SSD 之GC垃圾回收机制
- [VIM]常用快捷键
- angular使用ng-option。默认选中列表第一项
- 鄙人对jsp页面使用AJAX的一点小理解和用法
- (OK) 在内核中,获得 某目的地址的下一跳的数目,kernel 4.4
- MAC通过SSH使用PEM文件登录
- 万能解析json