首页 > 其他分享 >235. 二叉搜索树的最近公共祖先c

235. 二叉搜索树的最近公共祖先c

时间:2024-03-06 20:13:11浏览次数:29  
标签:right TreeNode struct 二叉 return 搜索 235 root left

 

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


struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
    if(root==p||root==q) return root;
    return preorder(root,p,q);
}

结果:

标签:right,TreeNode,struct,二叉,return,搜索,235,root,left
From: https://www.cnblogs.com/llllmz/p/18057425

相关文章

  • 236. 二叉树的最近公共祖先c
    思想就是层次遍历,然后判断每个节点是否为父节点、/***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/booljudge(structTreeNode*root,structTreeNode*q){if(......
  • 33. 搜索旋转排序数组(中)
    目录题目二分搜索题目整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1......
  • 35. 搜索插入位置
    目录题目模板之二分搜索的左边界版题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(logn)的算法。示例1:输入:nums=[1,3,5,6],target=5输出:2示例2:输......
  • 代码随想录算法训练营day14 | leetcode 144. 二叉树的前序遍历、145. 二叉树的后序遍
    目录题目链接:144.二叉树的前序遍历-简单题目链接:145.二叉树的后序遍历-简单题目链接:94.二叉树的中序遍历-简单递归三要素:确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归......
  • 洛谷题单指南-搜索-P1605 迷宫
    原题链接:https://www.luogu.com.cn/problem/P1605题意解读:从起点走到终点的方案数,DFS可遍历所有情况。解题思路:在DFS过程中,有两种标记墙:不能访问已访问过的,不能重复访问定义数组inta[N][N]表示迷宫,1是墙或者已访问过的,0是可以通过的。100分代码:#include<bits/stdc++.h>......
  • 530. 二叉搜索树的最小绝对差c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/voidinorder(structTreeNode*root,int*t,int*pre){if(!root)return;inorder(root->left,t,pr......
  • 98. 验证二叉搜索树c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/booljudge(structTreeNode*root,long*pre){if(!root)returntrue;boola=judge(root->left,......
  • 700. 二叉搜索树中的搜索c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*searchBST(structTreeNode*root,intval){if(!root)returnNULL;while(root){......
  • 617. 合并二叉树 c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*mergeTrees(structTreeNode*root1,structTreeNode*root2){if(!root1&&!roo......
  • 106. 从中序与后序遍历序列构造二叉树 c
    /***Definitionforabinarytreenode.*structTreeNode{*intval;*structTreeNode*left;*structTreeNode*right;*};*/structTreeNode*buidl_tree(int*inorder,inthead1,intn1,int*postorder,inthead2,intn2){if(n1<......