Finding the parent of a node in a Binary tree

binary-tree, data-structures, java, parent

Solution

The problem is that you MUST keep track of your current node, while keeping the node who's parent you want to find. And as far as I understand your code, you keep the variable, but never change it I'd recommend using a helper function. This would look something like that:

public BinaryNode parent(BinaryNode p){
    parentHelper(root,p)
}
private BinaryNode parentHelper(BinaryNode currentRoot, BinaryNode p) {        
    if (isRoot(p) || currentRoot==null){
            return null;
    }
    else{
        if(currentRoot.left==p || currentRoot.right==p)
            return currentRoot;
        else {
            if (currentRoot.element<p.element) {
                return parentHelper(currentRoot.right,p);
            }
            else {
                return parentHelper(currentRoot.left,p);
            }
        }
    }
}  

Problem

I am trying to write a method to find the parent of a given node. Here's my method. I created a `BinaryNode` object r which initially refers to root. ``` public BinaryNode r=root; public BinaryNode parent(BinaryNode p){ BinaryNode findParent=p; if (isRoot(findParent) || r==null){ return null; } else{ if(r.left==findParent || r.right==findParent) return r; else{ if (r.element<findParent.element) return parent(r.right); else return parent(r.left); } } } ``` THis code doesn't work properly .I think that's because r is a null object.Because when I do ``` if (isRoot(findParent) || r==null){ System.out.println(r==null); return null;} ``` `r==null` evaluates to `true`.How come that happen because I have inserted nodes as ``` public static void main (String args[]){ BinaryTree t=new BinaryTree(); t.insert(5); t.insert(t.root,4); t.insert(t.root,6); t.insert(t.root,60); t.insert(t.root,25); t.insert(t.root,10); ``` and the root is not null. Can some one please point out why that happens and if what I am trying to do in order to find the parent node is logically correct.

Original source