面试算法逻辑题

1、编写程序,编写节点类且有name属性 ,实例化6个节点,A节点和B、C、D有关联,B和E、F有关联,那么编写程序,使得程序从A开始,以三种顺序打印节点名

[if !supportLists](1) [endif]A、B、C、D、E、F

[if !supportLists](2) [endif]F、E、D、C、B、A

[if !supportLists](3) [endif]E、F、B、C、D、A


#-*- encoding:utf-8 -*-

#建立题目中的节点

class Node:

    def __init__(self,name):

        self.name = name

        self.__node_list = []

    def extend_nodes(self,*args):

        self.__node_list.extend(args)

    #添加关联节点

    def add_node(self,node):

        self.__node_list.append(node)

    #当前节点是否有 关联节点

    def is_node_list_empty(self):

        if len(self.__node_list) == 0:

            return True

        else:

            return False

    #返回并删除关联的节点

    def pop_first_one_node_in_list(self):

        return self.__node_list.pop(0)

    #返回并删除关联的节点,从列表后面开始

    def pop_last_one_node_in_list(self):

        return self.__node_list.pop()

    def show_node_list(self):

        for node in self.__node_list:

            print node

    def __str__(self):

        return "node:%s"%self.name

node_a = Node("A")

node_b = Node("B")

node_c = Node("C")

node_d = Node("D")

node_e = Node("E")

node_f = Node("F")

node_a.extend_nodes(node_b,node_c,node_d)

# node_a.show_node_list()

node_b.extend_nodes(node_e,node_f)

# node_b.show_node_list()

def travel_1(node):

    #队列

    queue = []

    queue.append(node)

    while queue:

        e = queue.pop(0)

        print e

        while not e.is_node_list_empty():

            queue.append(e.pop_first_one_node_in_list())

def travel_2(node):

    queue = []

    result = []

    queue.append(node)

    while queue:

        e = queue.pop(0)

        result.insert(0,e)

        while not e.is_node_list_empty():

            queue.append(e.pop_first_one_node_in_list())

    for node in result:

        print node

def travel_3(node):

    stack = []

    stack.append(node)

    while stack:

        e = stack[-1]

        if not e.is_node_list_empty():

            new_node = e.pop_first_one_node_in_list()

            stack.append(new_node)

        else:

            print stack.pop()

# travel_1(node_a)

# travel_2(node_a)

travel_3(node_a)

你可能感兴趣的:(面试算法逻辑题)