原文:求二叉树任意两个结点最近的共同祖先

思路:用栈的非递归后根遍历二叉树时,遇到结点p时,栈中保存的即为p的所有祖先。利用这一点,在一次遍历中分布找出p和q的所有祖先,再找它们的共同祖先就容易了。 时间复杂度:和后根遍历一次二叉树一样,即O n 。 空间复杂度:O h ,h为二叉树的高度。 数据结构: struct BinTreeNode typedef struct BinTreeNode PBinTreeNode struct Bi ...

2012-09-10 22:13 2 4857 推荐指数:

查看详情

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

二叉树任意两个结点的距离 实现步骤: 计算跟到第一个结点的距离; 计算跟到第二个结点的距离; 计算lca; 计算跟到lca结点的距离; 结果为(1) + (2) - 2 * (4),因为重复计算了次的从跟到lca结点的距离; 1 class ...

Sat Aug 12 08:20:00 CST 2017 1 1858
二叉树结点共同祖先问题

【问题描述】假设二叉树采用二叉链表方式存储,root指向根结点,p所指结点和q所指结点二叉树中的两个不同结点,且互不成为根到该结点的路径上的点,编程求解距离它们最近共同祖先。【输入形式】二叉树的前序和中序遍历序列,用以创建该二叉树的链式存储结构;以及二叉树两个结点数据 x 和 y【输出形式 ...

Tue Jun 11 06:38:00 CST 2019 0 488
二叉树任意两个节点的最近公共祖先

思路:从根节点开始遍历,如果node1和node2中的任一个和root匹配,那么root就是最低公共祖先。 如果都不匹配,则分别递归左、右子树,如果有一个 节点出现在左子树,并且另一个节点出现在右子树,则root就是最低公共祖先. 如果两个节点都出现在左子树,则说明最低公共祖先在左 ...

Sat Oct 21 08:28:00 CST 2017 2 6536
二叉树两个节点的最近公共祖先

一、递归版本 思想:假设根结点为root,其中给定的两个结点分别为A和B,它们分别都不为null。如果当前结点p为null,那么直接返回null,如果当前结点p是给定的结点中的其中一个结点,那么直接返回当前结点p(如果p是根结点,程序一次就返回了,下面的递归也不会出现)。如果当前节点不是A和B中 ...

Thu Aug 16 22:56:00 CST 2018 0 7429
寻找二叉树两个结点的最低共同父节点

题目:二叉树结点的定义如下: 输入二叉树中的两个结点,输出这两个结点在数中最低的共同结点。 答: 界面运行如下: 建造二叉树的tree.txt文件如下: ...

Sat Sep 01 03:56:00 CST 2012 2 7037
二叉树最近公共祖先节点

寻找最近公共祖先节点(LCA) 在一棵二叉树中,对于节点X和节点Y,X和Y的LCA是这棵树中X和Y的第一个共同祖先。寻找公共节点的算法思路很简单:对于节点x和y,找到树的根节点分别到x节点和y节点的路径(并不是遍历),并分别记录在两个数组中(或其他),数组中索引为0的元素为树的根节点,索引 ...

Mon Jul 13 23:39:00 CST 2015 0 2353
二叉树最近公共祖先

1.若二叉树是一个搜索二叉树 从树的根节点开始和两个节点作比较,如果当前节点的值比两个节点的值都大,则这两个节点的最近公共祖先节点一定在该节点的左子树中,则下一步遍历当前节点的左子树;如果当前节点的值比两个节点的值都小,则这两个节点的最近公共祖先节点一定在该节点的右子树中,下一步遍历当前节点的右 ...

Mon May 28 22:52:00 CST 2018 0 1713
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM