面试题8:二叉树的下一个节点(代码片段)

ovs98 ovs98     2023-01-13     538

关键词:

一.题目

给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。

二.思路

分析题目之后,我们发现,待处理节点只存在三种状态,我们分别处理即可:

技术分享图片

  1. 待处理节点有右子树。那么它的下一个节点为其右子树的最左子节点,如上图节点3的下一个节点为8;
  2. 待处理节点无右子树,且是父节点的左节点。那么它的下一个节点为其父节点,如上图节点5的下一个节点为3;
  3. 待处理节点无右子树,且是父节点的右节点。我们可以沿着它的父节点向上遍历,直至找到一个这样的节点,该节点是其父节点的左子节点,那么该节点的父节点就是所求节点,如上图节点6的下一个节点为1.

三.代码

BinaryTreeNode* GetNext(BinaryTreeNode* pNode)
    
    if(pNode == nullptr)
        return nullptr;

    BinaryTreeNode* pNext = nullptr;
    if(pNode->m_pRight != nullptr)
        BinaryTreeNode* pRight = pNode->m_pRight;
        while(pRight->m_pLeft != nullptr)
            pRight = pRight->m_pLeft;
        pNext = pRight;

    

    else if(pNode->m_pParent != nullptr)
        BinaryTreeNode* pCurrent = pNode;
        BinaryTreeNode* pParent = pNode->m_pParetn;

        while(pParent != nullptr && pNode = pParent->m_pRight)
            pCurrent = pParent;
            pParent = pParent->m_pParent;
        
        pNext = pParent;

    
    return pNext;

四.本题考点

  1. 考查应聘者对二叉树遍历的理解程度。只有对二叉树的遍历算法有了深刻的理解,应聘者才有可能准确找出每个节点的中序遍历的下一个节点。
  2. 考查应聘者分析复杂问题的能力。应聘者只有画出二叉树的结构图、通过具体的例子找出中序遍历的下一个节点的规律,才有可能设计出可行的算法。

[剑指offer]面试题8:二叉树的下一个节点(代码片段)

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路 1.找到所有的可能情况并归纳,写的代码需... 查看详情

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

//面试题8:二叉树的下一个结点//题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?//树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。//二叉树的结构体定义如... 查看详情

剑指offer面试题8.二叉树的下一个结点

面试题8.二叉树的下一个结点NowCoder题目描述给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。Java实现略 查看详情

经典算法题-基础-寻找二叉树的下一个节点(代码片段)

...且是父节点的右孩子相关代码问题描述题目描述给定一个二叉树和其中的一个结点,请找出中序遍历中的下一个结点并且返回要求时间限制:1秒空间限制:32768K方法原型publicTreeNodegetNext(TreeNodetreeNode)publicclassTreeNodeintval;TreeNode 查看详情

二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路首先知道中序遍历的规则是:左根右,然后作图 1.若当前... 查看详情

剑指offer(57)二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题目分析这题一定要画图,因为只有画图我们才能分清楚下一... 查看详情

59.二叉树的下一个节点(代码片段)

题目描述:??给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路分析:??二叉树的下一个节点,一共有以下情况:??1.二叉... 查看详情

面试题:二叉树的镜像(代码片段)

题目描述:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / 610 // 57911 镜像二叉树 8 / 106 // 11975代码//二叉树一般用到递归publicclassSolutionpublicvoidMirror(TreeNoderoot)TreeNodetemp;if(root==null)return;if(root!=nul... 查看详情

二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 1/*2publicclassTreeLinkNode3intval;4TreeLinkNodeleft=null;5TreeLinkNoderight=null... 查看详情

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

剑指offer-8二叉树的下一个节点题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:右侧有节点,直接打印右侧没... 查看详情

剑指offer:面试题19二叉树的镜像(代码片段)

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树8/610//57911镜像二叉树8/106//11975代码示例publicclassOffer19publicstaticvoidmain(String[]args)//构建树TreeNoderoot=newTreeNode(1);root.left=newTreeNode(2);root.right 查看详情

二叉树的下一个结点(代码片段)

...语言2秒空间限制:C/C++32M,其他语言64M题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:中序遍历:左中右,... 查看详情

剑指offer——06二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 题目的意思是,在一颗二叉树的中序遍历中,给出其中一个节... 查看详情

剑指offer:二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。classTreeLinkNode:def__init__(self,x):self.val=xself.left=Noneself.right=Noneself.paren... 查看详情

剑指offer(书):二叉树的下一个节点(代码片段)

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析:若一个节点有右子树,那么他的下一个节点就是他右子树中的... 查看详情

剑指offer-二叉树的下一个节点(代码片段)

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 ①节点右孩子存在,则设置一个指针从该节点的右孩子出发,一直沿着... 查看详情

二叉树系列——二叉树的最大距离(即相距最远的两个叶子节点,编程之美,百度面试题)(代码片段)

来自于编程之美3.8。参考:http://www.cnblogs.com/miloyip/archive/2010/02/25/1673114.html 这里有比较详细的讨论!题目:如果我们把二叉树看做图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两个节点之... 查看详情

剑指offer(python)------二叉树的下一个节点(代码片段)

题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。这道题意即:给定一个节点,按照中序遍历(左根右)的方式求该... 查看详情