算法_二叉树_最大二叉树

最大二叉树

leetcode链接

1.解法

这道题和用前序遍历和中序遍历构造二叉树的思路类似:

给定一个nums,每次都要从nums中找到一个最大值作为根节点,然后nums的左边就用同样的方法构造根节点的左子树(重复操作),右边也用同样的方法构造根节点的右子树(重复操作)。其实这样的nums正是一棵树的中序遍历。但是我们知道只用中序遍历是无法构造一棵树的,所以题目还给了一个nums中最大值作为根节点的条件。所以有了上面的思路,我们可以用递归的方法解决这道题。

伪代码:

def  构造最大树(nums):
	先从nums中找到最大值
	用最大值构造一个节点作为根节点root
	
	root.left = 构造最大树(最大值左边的数作为新的nums)
	root.right = 构造最大树(最大值右边的数作为新的nums)

	返回root

代码如下:

def constructMaximumBinaryTree(nums):

    def traversal(leftindex,rightindex):# leftindex:当前传入nums的左边界;rightindex:当前传入nums的右边界
    	# 递归出口:如果这个nums中没有元素了
        if leftindex>rightindex:
            return None

		# i:nums[leftindex:rightindex+1]中的最大值的索引
		# nums[i]:nums[leftindex:rightindex+1]中的最大值
        i = nums.index(max(nums[leftindex:rightindex+1]))

		# 根据最大值构造root节点
        maxnode = TreeNode(nums[i],None,None)

		# 构造左子树
        maxnode.left = traversal(leftindex,i-1)

		# 构造右子树
        maxnode.right = traversal(i+1,rightindex)

		# 返回根节点
        return maxnode

	# 返回根节点
    return traversal(0,len(nums)-1)

2.总结

python

list index方法:l.index(x,start,end):从 l [ s t a r t : e n d ] l[start:end] l[start:end]中找到 x x x的索引

算法

类似于通过两种遍历构造二叉树的方法,只不过这次只给了一个中序遍历+一个条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值