什么是搜索二叉树,每棵子树的头节点的值都比各自左子树上的所有节点值要大,也都比各自右子树上的所有节点值要小。
最好判断的一种方法是,中序遍历二叉树,遍历结果整个序列为升序,那么这棵树为搜索二叉树,也叫二叉查找树,二叉排序树。
那么本题题目为:给定一颗二叉树的头节点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这颗子树的头节点。
注意,给定的二叉树不一定是搜索二叉树,但整棵树一定有搜索二叉树,并且可能不止一个,需要找到节点数最多的那个。
很容易想到的思路是:遍历整颗树,把每一个节点当做头节点进行一次中序遍历,判断是否为搜索二叉树,并记录下这颗树的节点数,如果是搜索二叉树,保存该节点数和该头节点,然后继续遍历下一个节点,继续判断。
这个思路非常容易形成代码,并且是对的。整个代码如下:
public TreeNode getMax(TreeNode root) {
ArrayList<Integer> arr = new ArrayList<>();
Stack<TreeNode> s = new Stack<TreeNode>();
s.add(root);
TreeNode goal = null;
int max = 0;
while(!s.isEmpty()){
root = s.pop();
midOrder(root,arr);
boolean boo = tree(arr);