剑指offer_二叉树---二叉树的下一节点
2017-08-21 11:17
267 查看
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路
1,因为是中序遍历,顺序为左—中—-右2,因为考虑下一个节点,所以考察范围可以缩小到中和右
3,如果当前节点有右子树,那么下一个节点就是右子树的最左节点
4,如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点
5,如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点
代码
/** * */ package offerTest; /** * <p> * Title:Next * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月21日 上午10:34:53 */ class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; } } public class Next { public TreeLinkNode GetNext(TreeLinkNode pNode) { if (pNode == null) { return null; } // 如果当前节点有右子树 if (pNode.right != null) { TreeLinkNode p = pNode.right; while (p.left != null) { p = p.left; } return p; } else { // 如果当前节点没有右子树,且是父节点的左子节点 if (pNode.next != null) { TreeLinkNode pcur = pNode; TreeLinkNode parent = pcur.next; if (parent != null && pcur == parent.left) { 如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点 return parent; } while (parent != null && pcur == parent.right) {如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点 pcur = parent; parent = pcur.next; } return parent; } } return null; } }
相关文章推荐
- 剑指offer-07-从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- <剑指offer 面试题8>二叉树的下一个节点(Java)
- 【剑指offer】面试题 8:二叉树的下一个节点
- 剑指offer-从上往下打印出二叉树的每个节点,同层节点从左至右打印。
- 剑指offer_二叉树的下一个节点
- 剑指offer --- 二叉树的下一个节点
- 剑指offer 从上往下打印出二叉树的每个节点
- 从上往下打印出二叉树的每个节点,同层节点从左至右打印(剑指offer,面试题32)
- 剑指offer之二叉树的下一个节点
- 剑指offer 58 - 二叉树的下一个节点
- 【剑指offer】面试题8:二叉树的下一个节点
- 剑指Offer--二叉树的下一个节点
- 剑指offer(60):二叉树的下一个节点
- 剑指Offer-8:二叉树的下一个节点
- (C++)剑指offer-57:二叉树的下一个节点(树)
- 二叉树系列 - 求两节点的最低公共祖先,例 剑指Offer 50
- 剑指offer——二叉树的下一个节点
- 剑指offer-二叉树的下一个节点
- 【剑指offer】二叉树的下一个节点
- 剑指offer-由上而下由左到右输出二叉树节点值