前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Leetcode Golang 106. Construct Binary Tree from Inorder and Postorder Traversal.go

Leetcode Golang 106. Construct Binary Tree from Inorder and Postorder Traversal.go

作者头像
anakinsun
发布2019-04-12 10:13:47
4560
发布2019-04-12 10:13:47
举报
文章被收录于专栏:学习日记学习日记

版权声明:原创勿转 https://cloud.tencent.com/developer/article/1412837

思路

根据中序和后续遍历结果,重建二叉树

后续遍历的最后一个元素,是二叉树的root节点

到中序数组中,root节点的位置,则左边用来递归创建左子树,右边用来递归创建右子树

code

代码语言:javascript
复制
type Index struct {
	index int
}

func buildTree(inorder []int, postorder []int) *TreeNode {
	if len(inorder) == 0 {
		return nil
	}
	//后续遍历的最后一个元素,是二叉树的root节点
	rootIndex := &Index{len(postorder) - 1}
	return buildTreeR(inorder, postorder, 0, len(postorder)-1, rootIndex)
}

func buildTreeR(inorder []int, postorder []int, start int, end int, rootIndex *Index) *TreeNode {
	if start > end {
		return nil
	}

	rootValue := postorder[rootIndex.index]
	root := &TreeNode{rootValue, nil, nil}
	rootIndex.index--

	if start == end {
		return root
	}

	//找到中序数组中,root节点的位置,则左边用来递归创建左子树,右边用来递归创建右子树
	index := 0
	for i := start; i <= end; i++ {
		if inorder[i] == rootValue {
			index = i
			break
		}
	}

	root.Right = buildTreeR(inorder, postorder, index+1, end, rootIndex)
	root.Left = buildTreeR(inorder, postorder, start, index-1, rootIndex)

	return root
}

更多内容请移步我的repo:https://github.com/anakin/golang-leetcode

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • code
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档