标签:
LeetCode中关于树的构造的题目有下面几道:
这个模板在树的构造中很实用,其它几道题也都是依照这个来实现。
接下来是Convert Sorted List to Binary Search Tree,这个跟Convert Sorted Array to Binary Search Tree比較近似,差别是元素存储的数据结构换成了链表,只是引入了一个重要的问题,就是链表的訪问不是随机存取的,也就是不是O(1)的,假设每次去获取中点,然后进行左右递归的话,我们知道得到中点是O(n/2)=O(n)的,如此递推式是T(n) = 2T(n/2)+n/2。复杂度是O(nlogn)。并非线性的,所以这里我们就得利用到树的中序遍历了,依照递归中序遍历的顺序对链表结点一个个进行訪问,而我们要构造的二分查找树正是依照链表的顺序来的。如此就能依照链表的訪问顺序来构造。不会因此而添加找中间结点的复杂度。
最后是Construct Binary Tree from Preorder and Inorder Traversal和Construct Binary Tree from Inorder and Postorder Traversal。这种方法还是跟上面的题目一样来构造。主要问题是怎样将节点劈成左右两部分进行递归,Construct Binary Tree from Preorder and Inorder Traversal就是利用前序遍历跟一定在第一个,而中序遍历又能够依据根来把元素劈成两块,相似的Construct Binary Tree from Inorder and Postorder Traversal是依据后序遍历最后一个是根的特点。然后利用中序遍历劈块。原理是一样的,最后的实现大家能够參考一下代码。
这篇总结主要介绍了LeetCode中四个树的构造的题目。比較统一的思路就是在递归中创建根节点,然后找到将元素劈成左右子树的方法,递归得到左右根节点接上创建根然后返回。
该方法是相当有模板型。不熟悉的朋友练哈萨克斯坦。
版权声明:本文博主原创文章,博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/gcczhongduan/p/4835024.html