leetcode——Lowest Common Ancestor of a Binary Tree

题目

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.

思路

这一次说的是一个普通的二叉树,给出两个节点。求他们的最低公共父节点。


回忆一下,当这棵二叉树是二分查找树的时候的解决方式:
二分查找树解法:http://blog.csdn.net/langduhualangdu/article/details/47426339

没错。无论是二分查找树也好还是普通二叉树也好。他们的共同规律就是:所给出的两个节点一定在最低公共父节点的两側

那对于BST来说。能够通过大小进行比較推断是不是在当前节点的两側。普通二叉树怎样比較呢?

事实上,我们能够从反面去考虑这个事情:假设当前节点的某一側子树没有所给节点中的不论什么一个。那是不是就能肯定,该节点一定不是最低父节点(节点重合的情况另说),并且,所求节点一定在还有一側。

因此。我们能够这样:当前节点假设为null,返回null;假设为所给节点当中之中的一个,则返回该节点;否则,求出当前节点左子树的返回值和右子数的返回值,假设左右值都不为空。说明当前节点即为所求节点,否则,返回不为空的那个节点。

相同,当得到所求节点后。还是须要检查所在的树上是不是同一时候存在所给的两个节点。应该比較的是节点的地址而不是值。

代码

public boolean checkExist(TreeNode root, TreeNode p, TreeNode q){if(root==null)return false;boolean pExist = false, qExist = false;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.add(root);while(!queue.isEmpty()){TreeNode treeNode = queue.poll();if(treeNode==p)pExist = true;if(treeNode==q)qExist = true;if(pExist && qExist)return true;if(treeNode.left!=null)queue.add(treeNode.left);if(treeNode.right!=null)queue.add(treeNode.right);}return false;}public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {TreeNode candidateNode = search(root, p, q);if(checkExist(candidateNode,p,q))return candidateNode;else {return null;}}   public TreeNode search(TreeNode root, TreeNode p, TreeNode q){if(root==null)return null;if(root==p || root==q){return root;} else{TreeNode left = search(root.left, p, q);TreeNode right = search(root.right, p, q);if(left!=null && right!=null)return root;else {return left!=null?left:right;}}}

转载于:https://www.cnblogs.com/yutingliuyl/p/7289882.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL-06:pyMySQL增删改查基本命令笔记

增 # 导入pymysql模块 import pymysql # 连接database conn pymysql.connect(host“你的数据库地址”, user“用户名”,password“密码”,database“数据库名”,charset“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor conn.cursor() sql "INSERT INTO USER1(n…

ABP Framework 7.0 RC 新增功能简介

imageABP Framework 在架构上有四大目标&#xff1a;模块化、DDD、多租户和微服务。从 7.0 更新的功能来看&#xff0c;其侧重点转向微服务场景的实现&#xff0c;比如&#xff1a;Dapr 集成、动态权限和功能、外部本地化、分布式实体缓存服务&#xff0c;都是对微服务和分布式…

(原創) 07/28/1982 少女A (中森明菜)

Abstract明菜的第二首單曲&#xff0c;也是她的成名曲&#xff0c;在台灣曾經被歌手嘟嘟翻唱過。 Introduction[hjp2400,300,true]http://oomusou.googlepages.com/shojo_a.flv[/hjp2] 明菜從『少女A』這首單曲才開始竄紅&#xff0c;走的也是可愛路線&#xff0c;招牌的『明菜…

ftp服务

1.ftp工作原理FTP是一个客户机/服务系统。用户通过一个支持FTP协议的客户机程序&#xff0c;连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令&#xff0c;服务器程序执行用户所发出的命令&#xff0c;并将执行的结果返回到客户机。2.安装ftp服务yu…

Spark Streaming高级特性在NDCG计算实践

从storm到spark streaming&#xff0c;再到flink&#xff0c;流式计算得到长足发展&#xff0c; 依托于spark平台的spark streaming走出了一条自己的路&#xff0c;其借鉴了spark批处理架构&#xff0c;通过批处理方式实现了实时处理框架。为进一步了解spark streaming的相关内…

mac触控板 鼠标中键_如何在Windows 10中停止意外的触控板点击(以及其他鼠标增强功能)...

mac触控板 鼠标中键It’s been the bane of laptop users for years: you’re typing away, your palm brushes the trackpad, and the accidental click inserts the cursor in the middle of the text completely screwing things up. Banish the frustration of accidental …

.Net 7的AOT原理简析

楔子上节了解AOT和CLR的区别&#xff0c;这节来稍微深入看下AOT的原理是什么&#xff1f;原理其实 AOT 的原理非常简单&#xff0c;为啥呢&#xff1f;因为微软又回归了传统&#xff0c;搞起来Obj目标文件和Link连接器。当年的VC就是这么弄的。AOT的编译实际上是围绕这两个东西…

垂直居中及容器内图片垂直居中的CSS解决方法

方法一: <style type"text/css"> <!-- * {margin:0;padding:0} div { width:500px; height:500px; border:1px solid #666; overflow:hidden; position:relative; display:table-cell; text-align:center; vertical-align:middle } div p …

Django04: ORM配置与使用MySQL数据库

配置&#xff1a; 1.手动创建数据库。 create database testDB 2. 在Django项目的settings.py文件中&#xff0c;配置数据库连接信息&#xff1a; DATABASES {"default": {"ENGINE": "django.db.backends.mysql","NAME": "你…

推荐一款 .NET 编写的 嵌入式平台的开源仿真器

Renode 是一个开发框架&#xff0c;通过让你模拟物理硬件系统来加速物联网和嵌入式系统开发。Renode 可以模拟 Cortex-M、RISC-V 等微控制器&#xff0c;不仅可以模拟 CPU指令&#xff0c;还可以模拟外设&#xff0c;甚至可以模拟板载的外设。更强的是&#xff0c;它可以让你在…

Android Bluetooth模块学习笔记

一、蓝牙基础知识 1.蓝牙&#xff08; Bluetooth &#xff09;是一种无线技术标准&#xff0c;可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。蓝牙基于设备低成本的收发器芯片&#xff0c;传输距离近、低功耗。 2.微波频段&#xff1a;使用2.402GGHz到2.480GHz…

sql删除无人借阅的书_查找,下载,借阅,租赁和购买电子书的最佳网站

sql删除无人借阅的书So, you’ve got yourself an eBook reader, smartphone, tablet, or other portable device and you want to put some eBooks on it to take with you. There are many options for obtaining free eBooks as well as purchasing, borrowing, or even ren…

django05:ORM示例--person 增删改查

建立数据库连接后&#xff0c;演示代码 见我的资源 https://download.csdn.net/my

C#如何用正则表达式截取https和带端口的域名

如题。现有代码如下。只能截取 http://www.baidu.com的 www.baidu.com当域名为https://www.baidu.com 或者为 http://www.baidu.com:8080 时 则无法正确读取。。求高手给去能截取这样格式的代码 Thanks!string p "http://[^\.]*\.(?<domain>[^\.]*)";Regex r…

推荐一个开源的 .NET 二维码生成库

你好&#xff0c;这里是 Dotnet 工具箱&#xff0c;定期分享 Dotnet 有趣&#xff0c;实用的工具和组件&#xff0c;希望对您有用&#xff01;介绍QrCodeGenerator 是开源的 .NET 二维码生成库&#xff0c;它支持从文本字符串和字节数组生成二维码图片。这个库是基于 .NET Stan…

vue循环中的v-show

v-show如果使用循环对象的属性来时控制, 这个属性必须是加载时就存在的 <div class"list-group col-sm-12" v-for"(issue,index) in issue_list"><a click"switch_comments(issue, index)" style"background-color:#5cb85c;font-w…

C# 图片画矩形,添加文字

1.初始设置字体与笔 Pen pen new Pen(Color.FromArgb(220, Color.Green), 5);Font font new Font("微软雅黑", fontSize, FontStyle.Bold); // 定义字体Brush whiteBrush new SolidBrush(Color.FromArgb(220, Color.Red)); // 画文字用 2.初始设置图片和Graphics …

全量更新和增量更新_增量BIOS更新或直接更新到最新版本哪个更好?

全量更新和增量更新There are few things as irritating as a Blue Screen of Death, but sometimes there is an easy fix for it like updating the BIOS for instance. If multiple updates are available though, do you do incremental updates or can you just use the l…

BZOJ4590: [Shoi2015]自动刷题机

【传送门&#xff1a;BZOJ4590】 简要题意&#xff1a; 有l秒时间&#xff0c;AC了k道题&#xff0c;给出每秒写的代码行数&#xff08;行数>0表示写&#xff0c;<0表示删除&#xff0c;如果剩下的行数不够删&#xff0c;则为0&#xff09;&#xff0c;假设行数>n时能…

[Office 2010 易宝典]什么是Office Web App?如何在线查看Office文档?

什么是Office Web App&#xff1f; Office Web App使得Microsoft Office能扩展到网络浏览器上。用户可以直接在通过浏览器在线查看和编辑保存在网站上的文档。 如何上传Office文档&#xff1f; 在Microsoft Word 2010里面&#xff0c;您可以把Word文档保存到Windows Live SkyDr…