一、前言
里面来源LeetCode,难度:困难
问题链接:https://leetcode-cn.com/problems/bst-sequences-lcci/
二、题目
从左向右遍历一个数组,通过不断将其中的元素插入树中可以逐步地生成一棵二叉搜索树。给定一个由不同节点组成的二叉树,输出所有可能生成此树的数组。
示例:
给定如下二叉树
2
/ \
1 3
返回:
[
[2,1,3],
[2,3,1]
]
三、题意分析
本题的题意为:“根结点的数值” 总是先于它的 “左右子树中的结点的数值” 被插入树中。父节点优先级最高需要最先读取,左右子结点优先级相同,当左结点(或右结点)被读取之后,它的左右子结点和它服叔结点是同同一优先级,都可以在下次被读取。
例如树:
1)根节点4最先读取,2和5都可以在下次中被读取,
2)若第二次读取的是结点2,则1 3 5在接下来都可以被读取,对1 3 5 全排序有6种情况(135,153,315,351,513,531)。
3)若第二次读取的是结点5,则1 3在接下来都可以被读取,对1 3 全排序有2种情况(13,31)。
可能生成此树的数组有8个:
1> 4,2,1,3,5
2> 4,2,1,5,3
3> 4,2,3,1,5
4> 4,2,3,5,1
5> 4,2,5,1,3
6> 4,2,5,3,1
7> 4,5,2,1,3
8> 4,5,2,3,1
第一次看题,将其理解成先读父节点,再读左或者右节点。实现代码见——5.1 错误理解实现代码。<