输出二叉树中随机两个结点的最小公共父结点

思路:当遇到一个结点是返回1,当左右子树都返回1的时候,即最小公共父节点。

//二叉树的数据结构
typedef struct MyStruct
{
    char data;
    struct MyStruct *leftChild;
    struct MyStruct *rightChild;
}Node, *Tree;
//查找方法
int findFirstFather(Tree root, char first, char second,char &destination){
    int i, j;
    if (root==NULL)
    {
        return 0;
    }
    if (root->data == first || root->data == second)
    {
        return 1;
    }
    else
    {
        i = findFirstFather(root->leftChild, first, second, destination);
        j = findFirstFather(root->rightChild, first, second, destination);
        if (i == 1 && j == 1)
        {
            destination = root->data;
        }
        if (i||j)
        {
            return 1;
        }
    }
    return 0;
}
输入:ABC##DE#G##F###
输出:D
时间: 2024-10-14 15:21:45

输出二叉树中随机两个结点的最小公共父结点的相关文章

求解二叉树中两个结点的最低公共父结点

一,问题描述 构建一棵二叉树(不一定是二叉查找树),求出该二叉树中某两个结点的最低公共父结点.借用一张图如下: 结点8 和 结点5 的最低公共父结点为 结点2 二,二叉树的构建 与 求二叉树中第K层结点的个数 文章中的第二点:二叉树构建相同 三,求解最低公共父结点的算法实现 有两种思路,一种是通过中序遍历和后序遍历.由于中序遍历是先左子树中的结点,再访问根,再访问右子树中结点,因此这两个结点的公共父结点一定处于这两个结点之间. 如:中序遍历:8, 4, 9, 2, 5, 1, 6, 3, 7  

二叉树中任意两个节点的最近公共祖先节点

1.二叉树是个搜索二叉树 2.二叉树带有指向parent的指针 可转换成两个链表的相交节点 3.普通二叉树 保存从根节点分别到这两个节点的路径到list1和list2中 从list1和list2中找第一个不相等的节点即为最近公共祖先节点 template<class T> BinaryTreeNode<T>*  BinaryTree<T>::lastCommnParent(BinaryTreeNode<T>*& node1, BinaryTreeNo

[LeetCode] 1123. Lowest Common Ancestor of Deepest Leaves 最深叶结点的最小公共父节点

Given a rooted binary tree, return the lowest common ancestor of its deepest leaves. Recall that: The node of a binary tree is a?leaf?if and only if it has no children The?depth?of the root of the tree is 0, and if the depth of a node is?d, the depth

二叉树递归与非递归遍历,最近公共父节点算法

#include <iostream> #include <stack> using namespace std; #define MAX 100 //字符串最大长度 typedef struct Node //二叉树结点 { char data; Node *lchild,*rchild; } *Btree; void createBT(Btree &t); //先序构造二叉树 void preorder(Btree &t); //二叉树递归先序遍历 void i

求二叉树中任意两个结点的距离

求二叉树中任意两个结点的距离 实现步骤: 计算跟到第一个结点的距离: 计算跟到第二个结点的距离: 计算lca: 计算跟到lca结点的距离: 结果为(1) + (2) - 2 * (4),因为重复计算了两次的从跟到lca结点的距离: 1 class Node(object): def __init__(self, value=0): self.value = value self.left = self.right = None def get_path_length(root, n, path)

019写程序在一棵二叉树中找到两个结点的最近共同祖先(keep it up)

写程序在一棵二叉树中找到两个结点的最近共同祖先. 分两种情况来讨论这个题: 第一种情况结点中没有指向父结点的指针 第二种情况接种有指向父节点的指针 我们先看第一种情况,结点中没有指向父结点的指针. 我们可以采用暴力搜索每一个结点,如果这个结点的子树中 有已知的两个结点,那我们就继续沿着左右子树找,如果左子树 能找到,我们就继续沿着左子树找,如果有子树能找到,我们就 沿着右子树找,不存在两个子树都能够找到. 代码: struct TreeNode {<pre name="code"

二叉树中找两个结点的最近的公共祖先结点

#pragma once #include <iostream> using namespace std; /****************  * 二叉树中 找两个结点的最近的公共祖先结点 ******************/ struct Node {     Node* left;     Node* right;     int value;     Node(int v)         :value(v)         ,left(NULL)         ,right(NU

【编程题目】二叉树两个结点的最低共同父结点

75.二叉树两个结点的最低共同父结点(树)题目:二叉树的结点定义如下:struct TreeNode{int m_nvalue;TreeNode* m_pLeft;TreeNode* m_pRight;};输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点. 思路:修改后序遍历 我的方法需要一个额外的整数n来标定. 开始想用非递归,结果写不出来... 只好用递归了.... /* 75.二叉树两个结点的最低共同父结点(树) 题目:二叉树的结点定义如下: struct TreeNode {

二叉树中任意两节点的最低共同父节点

通过两个和二叉树相关的算法题来看看和递归在二叉树中的应用 输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点. 思路: 如果这两个节点不在同一个子树下面,那么这棵树的根节点就是他们的共同最低父节点. 如果两个都在右子树,那么以右子树的最上面的那个节点作为根节点,重新进行判断,递归调用. 同理两个都在左子树,则方法同上.  也就是说,最终的结果分别只有三种情况,一个节点在右子树,一个节点在左子树.两个节点都在右子树,两个节点都在左子树. 如果是第一种情况,那么当前的节点就是他们最低的公共