【编程题】【未知出处】二叉树的重构

给定二叉树的两种遍历方式,我们可以很容易的重构二叉树

这篇文章的图解很清楚 https://blog.csdn.net/sun_lm/article/details/82888980

 

现在的题目是:

只给定前序遍历,如何重构二叉树,例如给定124xxx3xx,X表示None

class Node():
    def __init__(self, value, left=None, right= None):
        self.left = left
        self.right = right
        self.val = value
index = 0
def construct(tree_str):
    '''
    if index >= len(tree_str):
        return None
        '''
    global index
    if not tree_str:
        return 
    if tree_str[index] == 'x':
        index += 1
        return None
    root = Node(tree_str[index])
    index += 1
    root.left = construct(tree_str)
    root.right = construct(tree_str)
    return root

def foreprint(tree): # 该函数用来检查重构的二叉树是否正确
    if tree is None:
        print "x"
        return 
    print tree.val
    foreprint(tree.left)
    foreprint(tree.right)
    
r = construct('124xxx3xx')
foreprint(r)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
二叉树是一种常见的数据结构,它由一组节点组成,每个节点包含一个值和指向左右子节点的指针。在提供的引用中,我们可以看到一些与二叉树相关的代码和函数。 首先,在引用中,我们可以看到一个定义了二叉树节点的结构体和一些相关函数的头文件。其中,BiTNode是节点的结构体,包含一个整型的数据和指向左右子节点的指针。BiTree是指向二叉树的指针类型。此外,还有一些函数,如BiTreeCreate用于创建二叉树,BiTreeDestroy用于销毁二叉树等。 接下来,在引用中,我们看到一个使用前序遍历数组构建二叉树的函数。这个函数接受一个前序遍历数组a和一个整型指针pi作为参数。函数会根据数组中的元素构建二叉树,其中'#'表示空节点。该函数使用递归的方式构建二叉树,并返回根节点的指针。 最后,在引用中,我们可以看到一个计算二叉树节点个数的函数。该函数接受一个二叉树的根节点指针root和一个整型指针p作为参数。函数会统计二叉树中的节点个数,并将结果保存在p指向的变量中。这个函数也是使用递归的方式实现的,先对当前节点计数,然后递归调用左右子树。 综上所述,二叉树是一种由节点组成的数据结构,可以通过前序遍历数组构建起一棵二叉树,并可以通过递归函数计算二叉树的节点个数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [王道数据结构编程题二叉树)](https://blog.csdn.net/qq_43686863/article/details/123334790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [数据结构:有关二叉树的必看~经典编程练习基础题(C语言版)](https://blog.csdn.net/qq_56870066/article/details/122908522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值