剑指offer--二叉树的下一个结点

来源:互联网 发布:html标签保存到数据库 编辑:程序博客网 时间:2024/05/01 09:59

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
public static class TreeLinkNode {    int val;    TreeLinkNode left = null;    TreeLinkNode right = null;    TreeLinkNode next = null;    TreeLinkNode(int val) {        this.val = val;    }}TreeLinkNode GetNext(TreeLinkNode pNode){if(pNode==null) return null;if(pNode.next==null){//如果是根节点,查找右子树的最左节点(如果存在)if(pNode.right==null) return null;pNode = pNode.right;while(pNode.left!=null) pNode=pNode.left;return pNode;}else if(pNode.next.left==pNode){//如果是父节点的左节点,当其右节点不存在时,返回父节点;否则返回右子树最左节点if(pNode.right==null) return pNode.next;pNode = pNode.right;while(pNode.left!=null) pNode=pNode.left;return pNode;}else if(pNode.next.right==pNode){//如果是父节点的右节点,当其右节点存在,返回右节点;否则返回最非右父节点之父(如果过程循环到根节点,返回空)if(pNode.right!=null) return pNode.right;while(pNode.next!=null && pNode.next.right==pNode) pNode=pNode.next;if(pNode.next==null) return null;return pNode.next;}return null;}


0 0
原创粉丝点击