剑指 Offer 08 二叉树的下一个节点 (此题力扣没有)
题目描述
给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。
下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示。
基本思路
节点(设为x)中序遍历的下一个节点有以下可能:
- 若x有右子树。则x的下一个节点为x右子树最左侧节点。如,2的下一个节点为8。
- 若x没有右子树,又分为2种情况:
- 若x是父节点的左孩子。则x的父节点就是x的下一个节点。如,7的下一个节点是4。
- 若x是父节点的右孩子。则沿着父节点向上,直到找到一个节点的父节点的左孩子是该节点,则该节点的父节点就是x的下一个节点。如,9的下一个节点是1。
java实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { TreeLinkNode root = pNode; if (root.right != null) { root = root.right; while (root.left != null) root = root.left; return root; } TreeLinkNode root2 = pNode; while (root2.next != null) { if (root2.next.left == root2) { return root2.next; } root2 = root2.next;
} return null;
} }
|