二叉树的下一节点

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

思路:.二叉树为空,则返回空;节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着指向左子结点的指针找到的叶子节点即为下一个节点

节点不是根节点。如果该节点是其父节点的左孩子,则返回父节点;否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
           if(pNode==null) return null;
        TreeLinkNode pNext=null;
        if(pNode.right!=null){
            TreeLinkNode pRight=pNode.right;
            while(pRight.left!=null)
                pRight=pRight.left;

            pNext=pRight;
        }else if(pNode.next!=null){
            TreeLinkNode cur=pNode;
            TreeLinkNode parent=pNode.next;
            while(parent!=null&&cur==parent.right){
                cur=parent;
                parent=parent.next;
            }
            pNext=parent;
        }
        return pNext;
    }
时间: 2024-10-06 03:31:26

二叉树的下一节点的相关文章

59.二叉树的下一个节点

题目描述: ??给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路分析: ??二叉树的下一个节点,一共有以下情况: ??1.二叉树为空,返回空 ??2.节点的右孩子存在,则设置一个指针从右孩子出发,一直沿着左子节点的指针找到的叶子节点即为下一个节点. ??3.节点不是根节点,如果节点时父节点的左孩子,那么父节点就是下一个节点,否则继续向上遍历其父节点的父节点,重复之前的判断,返回结果. 代码: /* pub

[ 剑指offer ] 面试题8:二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 1.找到所有的可能情况并归纳,写的代码需要把这些情况都覆盖到. 2.具体情况详见书本# -*- coding:utf-8 -*- # class TreeLinkNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # self

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

剑指offer-8 二叉树的下一个节点 题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路: 右侧有节点,直接打印 右侧没节点 此节点的父节点的左节点是自己,打印 此节点的父节点的右节点是自己,向上继续找,直到满足2.1 自己解答: /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right

剑指offer(57)二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目分析 这题一定要画图,因为只有画图我们才能分清楚下一个节点有哪些情况 1.如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点.也就是说,从右子节点出发一直沿着指向左子节点的指针,我们就能找到下一个节点. 2.如果没有右子树,又可以分为两种情况 如果节点是它父节点的左子节点,那么它的下一个节点就是它的父节点. 如果一个节点既没有右子

面试题8:二叉树的下一个节点

一.题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针. 二.思路 分析题目之后,我们发现,待处理节点只存在三种状态,我们分别处理即可: 待处理节点有右子树.那么它的下一个节点为其右子树的最左子节点,如上图节点3的下一个节点为8: 待处理节点无右子树,且是父节点的左节点.那么它的下一个节点为其父节点,如上图节点5的下一个节点为3: 待处理节点无右子树,且是父节点的右节点.我们可以沿着它的父节点向上遍历

剑指offer:二叉树的下一个节点

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. class TreeLinkNode: def __init__(self, x): self.val = x self.left = None self.right = None self.parent = None class Solution: """ 给定节点,求中序遍历下该节点的下一个节点 """

剑指Offer——二叉树的下一个节点

1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.代码实现 /* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; 指向父节点 TreeLinkNode(int val) { this.val = val; } }

剑指offer第二版面试题7:二叉树的下一个节点(JAVA版本)

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况: 1.有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点: 2.没有右子树,则判断该节点是否是其父节点的左孩子,如果是则其下一个要找的节点是其父节点: 3.如果不是其父节点

剑指offer——06二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目的意思是,在一颗二叉树的中序遍历中,给出其中一个节点,让你找到中序中该节点的下一个节点 题解: 情况 1:某节点有右子树,下一节点为右子树中的最左子节点 情况 2:某节点无右子树,且就是他父节点左子节,则下一节点为父节点 情况 3:某节点无右子树,且为他父节点的右子节点,则向上递归寻找它的父节点,直到根节点或某个父节点是它自身父节点的左子节点 1