1. 程式人生 > >二叉樹以及二叉搜尋樹兩個節點的公共祖先

二叉樹以及二叉搜尋樹兩個節點的公共祖先

題目如標題,解法都可以按照如下:


/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(!root||root==p||root==q) return root;
TreeNode* left=lowestCommonAncestor(root->left,p,q);
TreeNode* right=lowestCommonAncestor(root->right,p,q);
if(left&&right) return root;
else if(left) return left;
else if(right) return right;
if(left==NULL&&right==NULL) return NULL;
}
};

相關推薦

Docker搭建ELK6.4.1以及Elasticsearch6.4.1叢集(節點)

轉載請表明出處 https://blog.csdn.net/Amor_Leo/article/details/83011372 謝謝 ELK6.4.1以及Elasticsearch6.4.1叢集Docker搭建 搭建Elasticsearch叢集(兩個節點) doc

以及搜尋節點公共祖先

題目如標題,解法都可以按照如下: /** * Definition for a binary tree node. * struct TreeNode { * int val;

Leetcode 96 95 不同的搜尋(動態規劃、搜尋) 不同的搜尋II (遞迴、搜尋)

1.不同的二叉搜尋樹 給定一個整數 n,求以 1 … n 為節點組成的二叉搜尋樹有多少種? 示例: 輸入: 3 輸出: 5 解釋: 給定 n = 3, 一共有 5 種不同結構的二叉搜尋樹: 1 3 3 2 1 \

搜尋的最小節點絕對值之差/在查詢中尋找節點,使它們的和為一個給定值/找出 BST 中的所有眾數(出現頻率最高的元素)。

關於二叉樹的數值運算,一般考慮借用中序遍歷為陣列;再進行計算的思想。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

搜尋節點的最近公共祖先

搜尋二叉樹中兩個節點的最近公共祖先 Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST. According to the

節點的最近公共祖先(三叉鏈,搜尋,普通

求二叉樹中兩個節點的最近公共祖先。 要求:分別考慮以下三種情況        1、二叉樹每個節點有parent(三叉鏈)        2、二叉樹是搜尋二叉樹。        3、就是普通二

資料結構 2 字串 陣列、以及的遍歷

上一節的學習中,我們已經結合JAVA 本身,將線性表所包含的順序表、連結串列、棧、佇列等資料結構通通學習了一番,並且將這些資料結構的一些基本操作。比如 - add() - remove() - pop() 等等方法都進行了列舉,通過這些,我們將對線性表有了一個直接的認識。這節將學習有關字串、廣義表等內容。

中任意節點的最近公共祖先

stc node comm cnblogs blog style == spa 發現 public class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p,

查詢中尋找節點,使它們的和為一個給定值

給定一個二叉搜尋樹和一個目標結果,如果 BST 中存在兩個元素且它們的和等於給定的目標結果,則返回 true。 使用中序遍歷得到有序陣列之後,再利用雙指標對陣列進行查詢。 應該注意到,這一題不能用分別在左右子樹兩部分來處理這種思想,因為兩個待求的節點可能分別在左右子樹中。 /** *

程式設計師面試100題之十六 節點的最近公共節點

                這個問題可以分為三種情況來考慮:情況一:root未知,但是每個節點都有parent指標此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩個連結串列,然後求兩個連結串列的第一個公共節點,這個方法很簡單,不需要詳細解釋的。情況二:節點只有左、右指標,沒有parent

3.18 在中找到節點的最近公共祖先

【題目】:   給定一棵二叉樹的頭節點head,以及這棵樹中的兩個節點o1和o2,請返回o1和o2的最近公共祖先節點   例如,如下圖所示的二叉樹:                       1                       2    

《程式設計師面試金典》--尋找節點的第一公共祖先(三種情況)

/**************************************************************************************************

順序,求m下面有多少節點(總共n節點

//用佇列來計算 ,如果m的左孩子節點x滿足<=n,則進入佇列, 如果m的右孩子y<=n,也進入佇列 //然後將x在繼續彈出佇列,看他的左右孩子是否滿足,滿足則還是加入佇列,以此類推,直到佇列為空 //deque的常用操作函式為:c.empty() c.f

資料結構演算法題/節點的最近公共節點

這個問題可以分為三種情況來考慮: 情況一:root未知,但是每個節點都有parent指標 此時可以分別從兩個節點開始,沿著parent指標走向根節點,得到兩個連結串列,然後求兩個連結串列的第一個公共節點,這個方法很簡單,不需要詳細解釋的。 情況二:節點只有左、右指標,沒有parent指標,roo

節點的最低公共節點

問題描述 構建一棵二叉樹(不一定是二叉查詢樹),求出該二叉樹中某兩個結點的最低公共父結點。借用一張圖如下: 最低公共父結點的思路 遞迴,首先從樹根開始考慮: ①結點A 和 結點B 要麼都在樹根的左子樹中;②要麼都在樹根的右子樹中;③要麼一個在左子樹中

節點的最近公共祖先(leetcode)

leetcode題目地址 二叉樹構造 TreeNode* t1 = new TreeNode(3); TreeNode* t2 = new TreeNode(5); TreeNode* t3 = new TreeNode(1);

節點的最近公共祖先結點

二叉樹是搜尋二叉樹 1、原理:二叉搜尋樹是排序過的 ,位於左子樹的結點都比父結點小,位於右子樹的結點都比父結點大,我們只需從根節點開始和兩個輸入的結點進行比較,如果當前節點的值比兩個結點的值都大,那麼最低的公共祖先結點一定在該結點的左子樹中,下一步開遍歷當前結點的左子樹。如

問題——尋找節點的最近公共祖先

此題大概分為3種情況: 1、節點中無parent,但提供了root (1)、此種情況又分為兩種,開闢空間,使用容器來儲存路徑,將其轉換為求連結串列公共節點的問題,時間複雜度為O(N),空間複雜度為O(N) (2)、不開闢空間,在節點的左右子樹上尋找兩個節點

節點的最近公共祖先節點

#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<vector> using std::cin; using std::cout; usi

ODOA(2) 求節點的最大距離(C語言實現)

問題描述; 如果我們把二叉樹看成一個圖,父子節點之間的連線看成是雙向的,我們姑且定義"距離"為兩節點之間邊的個數。寫一個程式求一棵二叉樹中相距最遠的兩個節點之間的距離。 演算法很容易想得到: 如果根節點的左子樹或右子樹為空,那麼最大距離即為樹的深度否則,最大距離等於