题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题目的意思是,在一颗二叉树的中序遍历中,给出其中一个节点,让你找到中序中该节点的下一个节点
题解:
情况 1:某节点有右子树,下一节点为右子树中的最左子节点
情况 2:某节点无右子树,且就是他父节点左子节,则下一节点为父节点
情况 3:某节点无右子树,且为他父节点的右子节点,则向上递归寻找它的父节点,直到根节点或某个父节点是它自身父节点的左子节点
1 class Solution { 2 public: 3 TreeLinkNode* GetNext(TreeLinkNode* pNode) 4 { 5 if (pNode == nullptr) 6 return nullptr; 7 if (pNode->right != nullptr)//有右子树,则为右子树的最左节点 8 { 9 pNode = pNode->right; 10 while (pNode->left != nullptr) 11 pNode = pNode->left; 12 return pNode; 13 } 14 else if (pNode->right == nullptr) 15 { 16 while (pNode->next!=nullptr && pNode != pNode->next->left) 17 pNode = pNode->next; 18 return pNode->next; 19 } 20 return nullptr; 21 } 22 };
原文地址:https://www.cnblogs.com/zzw1024/p/11651322.html
时间: 2024-10-09 01:08:36