CareerCup-4.6
来源:互联网 发布:电脑数据流量统计 编辑:程序博客网 时间:2024/06/05 22:32
Design an algorithm and write code to find the first common ancestor of two nodes
in a binary tree Avoid storing additional nodes in a data structure NOTE: This is not
necessarily a binary search tree
in a binary tree Avoid storing additional nodes in a data structure NOTE: This is not
necessarily a binary search tree
#include <iostream> using namespace std; typedef int Data; struct Node { Node(Data d):data(d){left = right = NULL;}; Data data; Node* left; Node* right; Node* parent; };struct ListNode{ ListNode(Node* n):data(n){next = NULL;}; ListNode* next; Node* data;}; class Tree { public: Tree():root(NULL){}; Node* root; void insert(Data data, Node* node = NULL) { if(root == NULL) { root = new Node(data); root->parent = NULL; return; } if(node == NULL) node = root; if(data == node->data) { return; } else if(data < node->data) { if(node->left == NULL) { node->left = new Node(data); node->left->parent = node; } else { insert(data, node->left); } } else { if(node->right == NULL) { node->right = new Node(data); node->right->parent = node; } else { insert(data, node->right); } } }; //first common ancestor void fca(Node* a, Node* b) { Node* p = b; while(a != NULL) { b = p; while(b != NULL) { if(a == b) { cout<<a->data<<endl; return; } b = b->parent; } a = a->parent; } }; int fca2(Node* a, Node* b, Node* node = NULL) { if(node == NULL) node = root; int r = 0; if(node == a) { r += 1; }; if(node == b) { r += 2; }; if(r != 3) { r += node->left==NULL?0:fca2(a, b, node->left); r += node->right==NULL?0:fca2(a, b, node->right); } if(r == 3) { cout<<"FCA: "<<node->data<<endl; r = 0; } return r; }};int main() { Tree tree; tree.insert(5); tree.insert(1); tree.insert(7); tree.insert(4); tree.insert(3); tree.fca2(tree.root, tree.root->left->right->left); system("pause"); };
- CareerCup-4.6
- CareerCup 4.6
- CareerCup 1.3
- CareerCup 1.4
- CareerCup 5.7
- CareerCup 14.6
- CareerCup 1.1
- CareerCup 1.2
- CareerCup 1.3
- CareerCup 1.4
- CareerCup 1.5
- CareerCup 1.6
- CareerCup 1.7
- CareerCup 1.8
- CareerCup 2.1
- CareerCup 2.2
- CareerCup 2.3
- CareerCup 2.4
- linux多线程【6】单实例的进程-记录锁的使用
- windowsCE异常和中断服务程序初探
- Struts2常用标签
- JGroups在两台机器之间找不到对方的解决方法
- 深入剖析MFC中Windows消息处理机制
- CareerCup-4.6
- C# DataGridView给行加序号
- 设计模式之状态模式
- RGB和Raw RGB
- Swing中JScrollPane添加JPanel设置setPreferredSize问题
- Tar.bz2怎么安装,tar.gz怎么安装
- 线程同步基础知识
- Android开发之Spinner的使用
- WebView作为嵌入浏览器进行OAuth1.0认证