题目要求:一个正常的二叉树结构,添加一个父节点指针,指向父节点。大概是如下结构
后继节点的含义就是中序遍历时候 该节点的下一个节点。
class TreeNodes {
TreeNodes left;
TreeNodes right;
TreeNodes parent;
int index;
@Override
public String toString() {
return index+" ";
}
public TreeNodes(int index) {
this.index = index;
}
}
根据分析,得到以下结论,一个节点如果有右子树 那么他的后继节点就是右子树的最右节点。如果该节点没有右子树就是以这个节点为起点,找到他的该节点为其父节点左子树的点, 那个父节点就是他的后继节点。 原因是如果该节点没有右子树,他为最后的子节点,如果他是左子树,那么后继是他的父类,为右节点,后继为父类的父类。即循环查找一次之后的子节点是父节点的左子树。
public static TreeNodes getNexNode(TreeNodes node){
if(node==null){return node;}
//分为两类 ,一类是有右孩子,
if(node.right!=null){
return getLeftNode(node.right);
}else{
TreeNodes parent =node.parent;
wh