【算法】求二叉树的下一个结点

来源:互联网 发布:c语言还是p语言好 编辑:程序博客网 时间:2024/04/29 18:23

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目分析:

三种情况:

1.如果二叉树为空,则返回空值;
2.如果节点右孩子存在,从右孩子出发,一直沿着指向其左子数结点的指针找到的叶子节点即为下一个节点;
3.如果节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,循环判断直到该结点是父节点的左孩子,返回结果。

/*public class TreeLinkNode {    int val;    TreeLinkNode left = null;    TreeLinkNode right = null;    TreeLinkNode next = null;    TreeLinkNode(int val) {        this.val = val;    }}*/public class Solution {    public TreeLinkNode GetNext(TreeLinkNode pNode)    {        if(pNode==null)    return null;        if(pNode.right!=null){            TreeLinkNode l=pNode.right.left;            TreeLinkNode parent=pNode.right;            while(l!=null){                parent=l;                l=l.left;            }            return parent;        }     while(pNode.next!=null){            TreeLinkNode p=pNode.next;            if(p.left==pNode)//如果是父节点的左孩子,返回父节点            {                return p;            }            else pNode=pNode.next;        }     return null;    }}


原创粉丝点击