题目描述
请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class Successor {
ArrayList<Integer> list = new ArrayList<>();
public int findSucc(TreeNode root, int p) {
// write code here
midOrder(root);
for (int i = 0; i < list.size(); i++) {
if(list.get(i).equals(p))
return list.get(i+1);
}
return -1;
}
public void midOrder(TreeNode root)
{
if(root!=null)
{
midOrder(root.left);
list.add(root.val);
midOrder(root.right);
}
}
}