Q: 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.

A:不允许额外的空间开销,那么就需要从根开始往下寻找。

因为根节点肯定是其共同的祖先,然后不断往下找,直到找到最后一个两个节点的共同祖先。

#include <iostream>
#include <vector>
using namespace std;const int maxn = 100;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode *parent;TreeNode () {}TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};//初始化数据
TreeNode *dfs(vector<int> &num, int start, int end) {if (start == end) {return NULL;}int mid = start + (end-start)/2;TreeNode *root = new TreeNode(num[mid]);root->left = dfs(num, start, mid);root->right = dfs(num, mid+1, end);return root;
}TreeNode *sortedArrayToBST(vector<int> &num) {const int n = num.size();if (n == 0) {return NULL;}return dfs(num,0,n);
}bool isAncestor(TreeNode *root, TreeNode *dst) {if (!root) {return false;}if (root == dst) {return true;}return isAncestor(root->left, dst) || isAncestor(root->right, dst);
}TreeNode* commonAncestorHelper(TreeNode *root, TreeNode *one, TreeNode *two) {if (!root) {return NULL;}if (root == one || root == two) {return root;}bool is_one_on_left = isAncestor(root->left, one);bool is_two_on_left = isAncestor(root->left, two);if (is_one_on_left != is_two_on_left) {return root;}TreeNode *child = is_one_on_left?root->left:root->right;return commonAncestorHelper(child, one, two);
}TreeNode* commenAncestor(TreeNode *root, TreeNode *one, TreeNode *two) {if (!isAncestor(root, one) || !isAncestor(root, two)) {return NULL;}return commonAncestorHelper(root, one, two);
}TreeNode* search(TreeNode* head, int x){if(head == NULL) return NULL;else if(x == head->val) return head;else if(x <= head->val) search(head->left, x);else search(head->right, x);
}int main(){vector<int> a;for (int i = 1; i < 10; i++) {a.push_back(i);}TreeNode *head = sortedArrayToBST(a);TreeNode *n1 = search(head, 2);TreeNode *n2 = search(head, 4);cout<<n1->val<<" "<<n2->val<<endl;TreeNode *ans = commenAncestor(head, n1, n2);cout<<ans->val<<endl;return 0;
}

Q4.7 Find commen ancestor相关推荐

  1. 1143 Lowest Common Ancestor(建树与不建两种思路)

    目录 解法一 解法二 解法一 这题可以不建树,直接利用BST的性质:左子树<根节点<右子树,对先序序列进行遍历,如果有某个元素大于等于u,v中较小的且小于等于u,v中较大的,则可能是根节点 ...

  2. Confluence 6 重构 ancestor 表

    ancestor 表记录了上级和下级(子页面)页面之间的关系.这个表格同时被用来确定子页面是否具有从上级页面继承来的限制(restrictions)权限. 偶尔 ancestor 表格中的数据可能被损 ...

  3. Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)

    题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...

  4. 235 Lowest Common Ancestor of a Binary Search Tree

    题目 235 Lowest Common Ancestor of a Binary Search Tree 因为是binary search tree,因此利用没个节点的值进行二分查找即可复杂度O(h ...

  5. 【错误记录】Flutter 使用 MediaQuery 适配全面屏报错 ( No MediaQuery widget ancestor found. )

    文章目录 一.报错信息 二.解决方案 一.报错信息 需要使用 MediaQuery 获取当前的 Padding ; import 'package:flutter/material.dart';/// ...

  6. 【错误记录】Flutter 界面报错 ( No MediaQuery widget ancestor found. | Scaffold widgets require a MediaQuery )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Flutter 应用运行时报如下错误 : Launching lib\main.dart on Pixel 2 in debug mode... R ...

  7. Q4,IT人从来没输过!

    一不留神,又到Q4了 咱IT人 Q4从来没输过 Q4第一单,10月8号就开标了 销售带着售前 自信满满步入开标现场 ↓ 经过前3Q的铺垫和放假7天的努力 他们已经给友商挖好了大坑 ↓ 研发部正在努力把 ...

  8. 从Q4财报,看有道如何实现从在线教育“迷途”中脱身?

    文|螳螂观察 作者| 青月 去年,在被称作中国校外教培史上最严厉的"双减"政策发布后,不管是上市多年的好未来.新东方,还是曾经保持盈利九个季度的高途都未能幸免. 在2021-202 ...

  9. 拆解声网Q4财报:除了“元宇宙”,我们还应该关注什么?

    文|螳螂观察 作者| 青月 过去的一年里,元宇宙的"风头"无人能及,不过鉴于其还未落地就已经引发了包括蹭热点.诈骗等诸多行业乱象,所以不少人对这个概念抱持着观望和不看好的态度.但到 ...

最新文章

  1. 速看!高校开学返校的40个最新信息
  2. 北大图灵班本科生获STOC最佳论文奖!这个对标清华姚班的人才计划,正在频频交出答卷...
  3. poj 1329(求三角形外接圆)
  4. 火炬之光2找不到服务器,火炬之光2无法运行解决办法详细介绍
  5. 爆火的Java面试题-kafka源码解析与实战豆瓣
  6. 如何测试W5300的内部TX/RX存储器?
  7. Javascript四种调用模式中的this指向
  8. Android Studio报错:This Gradle plugin requires a newer IDE able to request IDE model level 3
  9. DOS命令批量更改文件名称(含空格等)
  10. sofelf转jic
  11. android tv香橙派镜像,香橙派-如何通过dd制作系统镜像
  12. 秃如其来的希望!Nature新研究:多能干细胞能形成近乎完整皮肤结构,移植小鼠后成功长出毛发...
  13. 搭建直播平台源码用到的云技术到底是什么
  14. 剖析ARM中断控制器与GIC中断控制器
  15. 2021-2025年中国物理疗法电子病历和计费软件行业市场供需与战略研究报告
  16. LoadRunner之Controller的Scenario-(Manual Scenario)手工场景
  17. MySQL Binlog温故知新
  18. 微信小程序中的wxml如何自动缩进、对齐
  19. Docker Hub的搭建、配置网络加速器、私有仓库的搭建以及私有仓库的认证与加密
  20. 青岛大学计算机组成与结构,青岛大学计算机组成及结构1-9章作业.docx

热门文章

  1. 大数据发展前沿 期末总结复习
  2. 本体学习方法及开发过程小结
  3. 化繁为简,微软 Desktop Flow(“RPA”)正式在华商用!
  4. 服务器安装windows2016选择磁盘时报错不能将系统安装到此盘符
  5. 大学生计算机基础大难,大学生计算机基础实训六样文
  6. ACdream 1224 Robbers
  7. 数据结构求子串、非空子串、真子串、非空真子串数
  8. WIN10打印机显示服务器脱机,win10网络打印机显示脱机处理方法
  9. mysql24div13_第七次codeforces竞技结束 #258 Div 2
  10. 阈值、阙值 有没有阀值?