二叉树的下一个节点(Java实现)

题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。

二叉树结构定义:

/**
 * 二叉树结构类
 * @author xdu_stuxi
 *
 */
class BinaryTreePNode {
	char value;
	BinaryTreePNode left;
	BinaryTreePNode right;
	BinaryTreePNode parent;
}

具体实现代码:

	public static BinaryTreePNode getNextNode(BinaryTreePNode pNode) {
		
		if (pNode == null) {
			return null;
		}
		
		// 右子树不为空
		if (pNode.right != null) {
			pNode = pNode.right;
			// 循环判断,得到右子树的最左子节点即为下一个节点
			while (pNode.left != null) {
				pNode = pNode.left;
			}
			return pNode;
		}
		
		// 右子树为空 
		// 循环判断父节点
		while (pNode.parent != null) {
			// 如果该节点的父节点的左子节点为自己本身,返回父节点
			if (pNode.parent.left == pNode) {
				return pNode.parent;
			}
			pNode = pNode.parent;
		}
		
		return null;
	}

    

 

你可能感兴趣的:(剑指Offer(Java实现))