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

本题为剑指offer面试题58

牛客网测试地址:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e

[编程题]二叉树的下一个结点
  • 热度指数:31242  时间限制:1秒  空间限制:32768K
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

Java代码:

package go.jacob.day609;

public class Demo1 {
	public TreeLinkNode GetNext(TreeLinkNode pNode) {
		if (pNode == null)
			return null;
		TreeLinkNode tmp = null;
		// 如果pNode的右子树为空
		if (pNode.right == null) {
			tmp = pNode;
			// 如果该节点是某个最右节点
			while (tmp.next != null && tmp == tmp.next.right)
				tmp = tmp.next;
			return tmp.next == null ? null : tmp.next;
		}
		// 如果右子树不为空,找到右子树中的最左节点
		tmp = pNode.right;
		while (tmp.left != null) {
			tmp = tmp.left;
		}
		return tmp;
	}

	class TreeLinkNode {
		int val;
		TreeLinkNode left = null;
		TreeLinkNode right = null;
		TreeLinkNode next = null;

		TreeLinkNode(int val) {
			this.val = val;
		}
	}
}


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