首页 > 其他 > 详细

查找二叉树任意两个节点的父节点

时间:2014-04-12 15:31:24      阅读:488      评论:0      收藏:0      [点我收藏+]

做一个容器,我们在遍历二叉树寻找节点的同时,把从根到节点的路径扔进去(两个节点就是两个容器)。由于根节点最后一个被扔进去,但我们接下来又需要第一个就能访问到它——后进先出,所以这个容器是一个栈。时间复杂度O(N),空间复杂度O(N)。

代码

public class BinNode
{
     public int Element;
     public BinNode Left;
     public BinNode Right;
     public BinNode(int element, BinNode left, BinNode right)
     {
         this.Element = element;
         this.Left = left;
         this.Right = right;
     }

static bool GetPositionByNode(BinNode root, BinNode node, ref Stack stack)
{
     if (root == null)
         return false;
     if (root == node)
     {
         stack.Push(root);
         return true;
     }
     if (GetPositionByNode(root.Left, node, ref stack) || GetPositionByNode(root.Right, node, ref stack))
     {
         stack.Push(root);
         return true;
     }
     return false;
}

然后我们要同时弹出这两个容器的元素,直到它们不相等,那么之前那个相等的元素就是我们要求的父亲节点。

代码

static BinNode FindParentNode(BinNode root, BinNode node1, BinNode node2)
{
     Stack stack1 = new Stack();
     GetPositionByNode(root, node1, ref stack1);
     Stack stack2 = new Stack();
     GetPositionByNode(root, node2, ref stack2);
     BinNode tempNode = null;
     while (stack1.Peek() == stack2.Peek())
     {
         tempNode = (BinNode)stack1.Pop();
         stack2.Pop();
     }
     return tempNode;
}

查找二叉树任意两个节点的父节点,布布扣,bubuko.com

查找二叉树任意两个节点的父节点

原文:http://www.cnblogs.com/hongwei8455/p/3658577.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!