【问题标题】:Printing path route between two nodes打印两个节点之间的路径路径
【发布时间】:2014-12-03 01:42:17
【问题描述】:

我有以下树结构:

在java中实现如:

public class myprogram
{
    public static void main(String[] args)
    {

        Node Boss= new Node(0, "Boss");
        Node Manager1= new Node(1, "Manager1");
        Node Manager2= new Node(1, "Manager2");
        Node AssistantManager = new Node(2,"AssistantManager");
        Node Employee3 = new Node(3,"Employee3");
        Node Employee4 = new Node(3,"Employee4");
        Node Employee1 = new Node(6, "Employee1");
        Node Employee2 = new Node(6, "Employee2");

        Boss.left = Manager1;
        Boss.right = Manager2;

        Manager1.left = AssistantManager;
        Manager1.right = null;

        AssistantManager.left = Employee1;
        AssistantManager.right = Employee2;


        Manager2.left = Employee3;
        Manager2.right = Employee4;
    }

    static class Node
    {
        Node left;
        Node right;
        int value;
        String name;
        public Node(int value, String name)
        {
           this.value = value;
           this.name = name;
        }
    }
}

我的目标是创建一个方法来查找此树结构中两个节点之间的路径。例如,输入可能是:

String path = findPath(Boss,"AssistantManager",  "Manager2");
System.out.println(path);

鉴于此,“findPath”方法应返回“AssistantManager > Manager1 > Boss

如果输入是'Employee1,Employee2',它应该给出:

Employee1 > AssistantManager < Employee2

我一直在努力实现这一目标,因此非常感谢任何有关如何编码的帮助。

【问题讨论】:

    标签: java path binary-tree


    【解决方案1】:

    一种方法是获取 treeRoot 到 arg1(AssistantManager) 的路径和 root 到 arg2("Manager2") 的路径 然后找到共同的祖先。 例如助理经理的路径:老板 - Manager1 - AssisantManager Manager2 的路径:Boss - Manager2 所以路径:AssistantManager - Manager1 - boss - Manager2

    和第二个例子 老板 - manager1 - AssistantManager - E1 老板 - manager1 - assistantManager - E2 = E1 - 助理经理 - e2。

    这是一些伪代码

    List<String> firstPath = findSinglePath(Node tree, String first) (E1, AssManager, manager1m Boss)
    List<String> secondPath = findSinglePath(Node tree, String second) (E2, AssManager, manager1m Boss)
    path += "";
    for each firstPath
    add to path += currentNode + >
    if (secondPath contains currentNode) break loop (common ancestor)
    
    for each secondPath
    if (firstPath contains currentNode) break loop
    else path += < + currentNode
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2016-03-04
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多