博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lowest Common Ancestor of a Binary Tree
阅读量:2341 次
发布时间:2019-05-10

本文共 2240 字,大约阅读时间需要 7 分钟。

思路:这里来说,我的思路是用递归回溯把每个节点的路径都找出来。代码经过一点小小的手工测试,感觉是对的。但是,leetcode上给我1w个数的测试,然后栈就崩溃了。。在上面看到一个大神的解答,仅仅几行代码,足以看出他对递归的理解不是我能达到的。

我的代码

import java.util.ArrayList;import javax.sound.midi.Soundbank;class TreeNode {    int val;    TreeNode left;    TreeNode right;    TreeNode(int x) { val = x; left=right=null;}}public class Solution {
public static void main(String args[]) { TreeNode root=new TreeNode(1); TreeNode temp=new TreeNode(2); temp.right=new TreeNode(4); temp.right.left=new TreeNode(5); root.left=temp; root.right=new TreeNode(3); Solution so=new Solution(); TreeNode res=so.lowestCommonAncestor(root, temp.right, temp.right.left); System.out.println(res.val); } public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { ArrayList
pathsP=new ArrayList
(); ArrayList
pathsQ=new ArrayList
(); findPath(root, p, pathsP); findPath(root, q, pathsQ); if(pathsP.size()==1||pathsQ.size()==1) { return root; } int min=pathsP.size()
paths) { if(root==null) { return false; } paths.add(root); if(root.val==target.val) { return true; } else { if(findPath(root.left, target, paths)) { return true; }else if(findPath(root.right, target, paths)) { return true; } else { paths.remove(root); return false; } } }}

大神的解答

TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {        if(!root)            return NULL;        if(root == p || root == q)            return root;        // Check if left contains p or q        TreeNode* left = lowestCommonAncestor(root->left, p, q);        // Check if right contains p or q        TreeNode* right = lowestCommonAncestor(root->right, p, q);        // if left and right containsp or q the it'sthe LCA        if(left && right)            return root;        return left ? left : right;            }

转载地址:http://vbuvb.baihongyu.com/

你可能感兴趣的文章
elf文件与符号表
查看>>
linux net-snmp(之安装及配置)
查看>>
linux net-snmp(之android移植)
查看>>
linux net-snmp(之mib2c工具生成标量节点代码)
查看>>
linux net-snmp(之mib2c工具生成表格代码)
查看>>
扩展程序运行时的库路径
查看>>
机器人仿真 软件 V-REP 入门教程 (一)简介
查看>>
MATALB与VREP联合仿真--UR5机械臂动力学仿真
查看>>
PnP 单目相机位姿估计(一):初识PnP问题
查看>>
从零开始的仿真之旅——在Ubuntu下配置V-Rep仿真平台下的搭载ROS系统的机器人仿真
查看>>
V-rep学习笔记:ROSInterface
查看>>
一文了解 2018年最火爆的30个机器学习项目
查看>>
编译器字节对齐问题
查看>>
Linux CAN编程详解
查看>>
memset函数详细说明
查看>>
STM32中,关于中断函数调用全局变量的问题
查看>>
ROS学习之catkin_make
查看>>
Ubuntu 16.04 安装 ROS kinnetic
查看>>
关于QRadioButton的分组
查看>>
CUDA ---- GPU架构(Fermi、Kepler)
查看>>