原理:递归查找,使用查找节点的函数找到在树中的值,然后当当前节点的左孩子的指向或右孩子的指向为查找到的节点时,返回当前节点即可
比如: node.getLeftChild()==findNode()
那么其findNode()的父节点即为:node.
public Node parent(Object obj){
Node temp=parent(root, obj);
return temp;
}
public Node parent(Node node, Object findnode){
if(node==null){
return null;
}
if((node.getLeftChild()!=null&&node.getLeftChild().data.value==findnode.value)||(node.getRightChild()!=null&&node.getRightChild().data.value==findnode.value)){
//如果找到返回双亲节点
//这里需要判断node的左或右孩子是否为空的条件,否则一旦node的左孩子或右孩子为空(即:找不到)会报空指针的错误
return node;
}
//在左子树中查找 , 如果左子树中没有去右子树中查找
Node N;
if((N=parent(node.getLeftChild(),findnode))!=null){
return N;
}else{
return parent(node.getRightChild(),findnode);
}
}