Geeks LCA最低公共单亲节点
给出一颗二叉树。找到两个值的最小公共节点。
假设两个值都会在树中出现。
假设可能不会出现的话,也非常easy。就查找一遍看两个值是否在树中就能够了。假设不在就直接返回NULL。
基本思想:就是在二叉树中比較节点值和两个值的大小,假设都在一边(左边或者右边)那么就往下继续查找,否则就是都在同一边了,那么就能够返回这个节点了,这个节点就是最低公共单亲节点了。
參考:http://www.geeksforgeeks.org/lowest-common-ancestor-in-a-binary-search-tree/
#include <stdio.h>
#include <stdlib.h> class LCABST
{
struct Node
{
int data;
Node *left, *right;
Node(int d) : data(d), left(NULL), right(NULL) {}
};
Node *lca(Node *root, int n1, int n2)
{
if (!root) return NULL;
if (n1 < root->data && n2 < root->data)
return lca(root->left, n1, n2);
if (root->data < n1 && root->data < n2)
return lca(root->right, n1, n2);
return root;
} Node *lcaIter(Node *root, int n1, int n2)
{
while (root)
{
if (n1 < root->data && n2 < root->data)
root = root->left;
else if (root->data < n1 && root->data < n2)
root = root->right;
else break;
}
return root;
} Node *root;
public:
LCABST()
{
run();
} void run()
{
// Let us construct the BST shown in the above figure
root = new Node(20);
root->left = new Node(8);
root->right = new Node(22);
root->left->left = new Node(4);
root->left->right = new Node(12);
root->left->right->left = new Node(10);
root->left->right->right = new Node(14); int n1 = 10, n2 = 14;
Node *t = lca(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data); n1 = 14, n2 = 8;
t = lca(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data); n1 = 10, n2 = 22;
t = lca(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data); n1 = 10, n2 = 14;
printf("\nIterative Run:\n");
t = lcaIter(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data); n1 = 14, n2 = 8;
t = lcaIter(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data); n1 = 10, n2 = 22;
t = lcaIter(root, n1, n2);
printf("LCA of %d and %d is %d \n", n1, n2, t->data);
}
~LCABST()
{
deleteTree(root);
}
void deleteTree(Node *r)
{
if (!r) return;
deleteTree(r->left);
deleteTree(r->right);
delete r; r = NULL;
}
};
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva2VuZGVuMjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
Geeks LCA最低公共单亲节点的更多相关文章
- LCA最小公共父节点的解题思路
LCA最小公共父节点解法: 1.二叉搜索树: 中序遍历是升序,前序遍历即按序插入建树的序列. 二叉搜索树建树最好用前序+中序,如果用前序建树,最坏情况会退化为线性表,超时. 最近公共祖先甲级: A11 ...
- 剑指Offer(第二版)面试案例:树中两个节点的最低公共祖先节点
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74612786冷血之心的博客) 剑指Offer(第二版)面试案例:树 ...
- 235. Lowest Common Ancestor of a Binary Search Tree(LCA最低公共祖先)
Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the ...
- [leetcode]236. Lowest Common Ancestor of a Binary Tree 二叉树最低公共父节点
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...
- LeetCode 236 Lowest Common Ancestor of a Binary Tree 二叉树两个子节点的最低公共父节点
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- 剑指offer-第七章面试案例2(树中两个节点的公共祖先节点)
import java.util.LinkedList; import java.util.Queue; import java.util.Stack; //树中两个节点的最低公共祖先 //第一种情况 ...
- 寻找二叉树中的最低公共祖先结点----LCA(Lowest Common Ancestor )问题(递归)
转自 剑指Offer之 - 树中两个结点的最低公共祖先 题目: 求树中两个节点的最低公共祖先. 思路一: ——如果是二叉树,而且是二叉搜索树,那么是可以找到公共节点的. 二叉搜索树都是排序过的,位于左 ...
- 二叉树系列 - 求两节点的最低公共祖先,例 剑指Offer 50
前言 本篇是对二叉树系列中求最低公共祖先类题目的讨论. 题目 对于给定二叉树,输入两个树节点,求它们的最低公共祖先. 思考:这其实并不单单是一道题目,解题的过程中,要先弄清楚这棵二叉树有没有一些特殊的 ...
- 二叉树节点个数,叶子个数,第K层个数,最低公共节点
1. 节点个数 function getNodeNum(root){ if(root == null){ return 0; } //+1为root的计数 return getNodeNum(root ...
随机推荐
- ajax提交数据服务端返回报错
报错如下: if response.get('X-Frame-Options') is not None:AttributeError: 'str' object has no attribute ' ...
- Junit框架使用--JUnit常用断言及注解
从别人博客中抄过来一点东西 原文地址:http://blog.csdn.net/wangpeng047/article/details/9628449 断言是编写测试用例的核心实现方式,即期望值是多少 ...
- 百度图表echars插件使用案例
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- 关于 ajax 动态返回数据 css 以及 js 失效问题(动态引入JS)
ajax 毕竟是异步的 所以动态加载出来的数据 难免遇到 css 或者 js 失效的问题,所以要动态加载 css ji等文件了 1.公共方法 load //动态加载 js /css function ...
- js-图片img转base64格式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- python学习之-- 生成唯一ID
以下以2种方法生成唯一ID def uuid_method(): """第一种方法""" import uuid return str(uu ...
- 洛谷——P1187 3D模型
P1187 3D模型 题目描述 一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成.在每个网格上都可以有一个建筑,建筑由若干个1×1×1的立方体搭建而成(也就是所有建筑的底部都在同一平面上 ...
- Chelly的串串专题
CF149E 题意:给出一个长度为n的文本串和m个模式串,求有多少个模式串可以拆成两半,使得这两半按顺序匹配(n<=2e5,m<=100) 最暴力的想法就是对于每个询问串,全部和原串做一遍 ...
- 【原】手写spring async异步组件
最近在工作中使用到了spring自带的Async,主要是为了把其中耗时多.响应慢.计算复杂的业务抽取几个模块出来,并行查询.不得不说spring自带的比传统线程池提交在代码层次上看起来优雅简洁了不少 ...
- 为什么我们要用Python
最近有一个朋友问我:为什么我要用Python,这是一个好问题,今天有空,把这个问题简单整理了一下,回来朋友的问题.该整理主要来源于网络和其他资料,如果有侵权还请告知. Python的好 ...