求后继(带父节点)

标题

package _8题;
/**
 * 请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。
 *
 */
/*有parent的解法*/
public class _4_6Successor0 {
     
public TreeNode<Integer>findSuccessor(TreeNode<Integer>node){
     
	if(node==null)
		return null;
	if(null!=node.right) {
      //如果右孩子
		return minOfRight(node.right);
	}else {
      //如果没有右孩子
		TreeNode<Integer>p=node;//西北向东北
		while(p.parent!=null&&p==p.parent.right) {
     
			p=p.parent;
		}
		return p.parent;
	}
	
	
}

private TreeNode<Integer> minOfRight(TreeNode<Integer> right) {
     
	// TODO Auto-generated method stub
	TreeNode <Integer>p=right;
	while(p.left!=null) {
     
		p=p.left;
	}
	return p;
}
}

你可能感兴趣的:(数据模板,数据结构之树,算法,数据结构,java)