解析:先序遍历树,用两个链表保存遍历所走的路径,再求两个链表的最低公共结点

#include <stdio.h>
#include <vector>
#include <iostream>using namespace std;typedef struct node
{char var;struct node* lTree;struct node* rTree;
}Tree;Tree* create(void)
{char ch;scanf("%c",&ch);if(ch=='#')return NULL;Tree* node;node=(Tree*)malloc(sizeof(Tree));node->var=ch;node->lTree=create();node->rTree=create();return node;
}void preorder(Tree* root)
{if(root==NULL)return;else{printf("%c\t",root->var);preorder(root->lTree);preorder(root->rTree);}
}bool findPath(Tree* root,Tree* node,vector<Tree*> &path)
{if(root==NULL)return false;if(root->var == node->var)return true;bool result=false;path.push_back(root);if(!result){result=findPath(root->lTree,node,path);if(!result)result=findPath(root->rTree,node,path);}if(result==false)path.pop_back();return result;
}Tree* commonNode(vector<Tree*> path1,vector<Tree*> path2)
{vector<Tree*>::iterator i1=path1.begin();vector<Tree*>::iterator i2=path2.begin();while(*i1 == *i2){i1++;i2++;}return *(--i1);
}Tree* lastCommonNode(Tree* root,Tree* node1,Tree* node2)
{if(root==NULL || node1==NULL || node2==NULL)return NULL;vector<Tree*> path1;vector<Tree*> path2;findPath(root,node1,path1);/*vector<Tree*>::iterator i=path1.begin();for(;i!=path1.end();i++)cout<<(*i)->var<<endl;*/findPath(root,node2,path2);/*vector<Tree*>::iterator i=path2.begin();for(;i!=path2.end();i++)cout<<(*i)->var<<endl;*/return commonNode(path1,path2);
}int main()
{Tree* root;root=create();//preorder(root);//cout<<endl;Tree* node1;node1=(Tree*)malloc(sizeof(Tree));node1->var='f';node1->lTree=NULL;node1->rTree=NULL;Tree* node2;node2=(Tree*)malloc(sizeof(Tree));node2->var='h';node2->lTree=NULL;node2->rTree=NULL;Tree* node;node=lastCommonNode(root,node1,node2);cout<<node->var<<endl;return 0;
}

剑指offer 算法(树的两个节点的最低祖先)相关推荐

  1. 左神算法:判断 t1 树是否包含t2 树全部的拓扑结构(剑指 Offer 26. 树的子结构,Java版)

    本题来自左神<程序员代码面试指南>"判断 t1 树是否包含t2 树全部的拓扑结构"题目. 题目 剑指 Offer 26. 树的子结构 给定彼此独立的两棵树头节点分别为 ...

  2. java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...

    推荐阅读:宇宙条的工作总结:一年前还在面试找工作,一年后在面试找工作的学弟学妹们:第一次当面试官的经历分享小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合 ...

  3. 道指mt4代码_剑指offer算法题052:正则表达式匹配

    小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法.考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offe ...

  4. 【LeetCode】剑指 Offer 26. 树的子结构

    [LeetCode]剑指 Offer 26. 树的子结构 文章目录 [LeetCode]剑指 Offer 26. 树的子结构 package offer;//定义树节点 class TreeNode{ ...

  5. 剑指offer算法题028:数组中出现次数超过一半的数字

    小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法.考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offe ...

  6. 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

    [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...

  7. 剑指offer算法题分析与整理(一)

    下面整理一下我在刷剑指offer时,自己做的和网上大神做的各种思路与答案,自己的代码是思路一,保证可以通过,网友的代码提供出处链接. 目录 1.数组中的逆序对 2.二维数组中的查找 3.顺时针打印矩阵 ...

  8. 剑指offer算法合集

    汇总:Android小白成长之路_知识体系汇总[持续更新中-] 简述 算法,不知道是多少程序猿的痛,对我而言也如此,因此今天开始记录那些刷过的算法题,其中最经典的莫过于剑指offer里的题目,精妙的解 ...

  9. 剑指offer算法题分析与整理(二)

    下面整理一下我在刷剑指offer时,自己做的和网上大神做的各种思路与答案,自己的代码是思路一,保证可以通过,网友的代码提供出处链接. 目录 1.序列化二叉树 2.带记忆的DFS搜索 3.坐标数位和不大 ...

最新文章

  1. Windows 上连接本地 Linux虚拟机上的 mysql 数据库
  2. 【Ubuntu】Linux系统( ubuntu )安装方案
  3. CNN的卷积运算为何使用互相关而不是卷积
  4. 获取python包的路径
  5. elasticsearch中cluster和transport知识
  6. 转换文档参数_明明2秒可以搞定Word、Excel相互转换,你却用了半小时!真亏了...
  7. Ubuntu下搜狗输入法突然无法输入中文
  8. Android笔记 隐式意图demo
  9. securecrt 多窗口运行相同命令
  10. Unity项目中的资源管理
  11. 超级P2P搜索引擎使用教程和下载地址
  12. LidarSLAM(三):EVO- SLAM轨迹精度评价工具
  13. 【数据结构】—— 树状数组
  14. 在电脑上如何录制游戏
  15. 下厨房(istringstream的使用)----网易2017内推笔试编程题合集
  16. 基于云开发的查单词小程序设计 报告+PPT+项目源码+演示视频
  17. Java面试题之ServletJSP篇
  18. 2021华为软件精英挑战赛,思路框架,欢迎留言讨论
  19. 苹果游戏类产品如何做好ASO优化,苹果游戏aso优化
  20. 设计数据密集型应用——数据系统的未来(12 上)

热门文章

  1. HDU2021 发工资咯
  2. 第10章 序列的修改、散列和切片
  3. MySQL常见错误总结
  4. Centos7/RedHat7 下 python3使用cx-freeze打包matplotlib程序遇到的问题和解决办法
  5. ●BZOJ 2669 [cqoi2012]局部极小值
  6. Software-OO 面向对象思维
  7. 在angularjs实现一个时钟
  8. Python爬虫小实践:爬取任意CSDN博客所有文章的文字内容(或可改写为保存其他的元素),间接增加博客访问量...
  9. Cordova for iOS[ PhoneGap]
  10. Google App Engine 学习和实践