剑指offer——面试题58:二叉树的下一个结点
2017-11-13 21:38
267 查看
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
代码:
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode == NULL)
return NULL;
TreeLinkNode* nextNode = NULL;
if(pNode->right != NULL) // 如果该结点有右子树,那么下一个结点就是它右子树的最左子树
{
TreeLinkNode* pRight = pNode->right;
while(pRight->left != NULL) // 通过循环,寻找右子树的最左子树
pRight =pRight->left;
nextNode = pRight; // 返回下一个结点
}
else if(pNode->next != NULL) // 如果该结点没有右子树,
{
TreeLinkNode* parent = pNode->next;
TreeLinkNode* current = pNode;
while(parent != NULL && current == parent->right) // 如果该结点是它父结点的右子结点,不断沿着它父节点找,
{ // 直到找到一个是它父节点的左子结点
current = parent;
parent = parent->next;
}
nextNode = parent; // 如果该结点是它父节点的左结点,它下一个结点就是它的父结点
}
return nextNode;
}
};
分析:代码注释非常详尽了,不赘述。牛客网这题给的例程不好, next 其实表示的是父结点。
代码:
/*
struct TreeLinkNode {
int val;
struct TreeLinkNode *left;
struct TreeLinkNode *right;
struct TreeLinkNode *next;
TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
}
};
*/
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if(pNode == NULL)
return NULL;
TreeLinkNode* nextNode = NULL;
if(pNode->right != NULL) // 如果该结点有右子树,那么下一个结点就是它右子树的最左子树
{
TreeLinkNode* pRight = pNode->right;
while(pRight->left != NULL) // 通过循环,寻找右子树的最左子树
pRight =pRight->left;
nextNode = pRight; // 返回下一个结点
}
else if(pNode->next != NULL) // 如果该结点没有右子树,
{
TreeLinkNode* parent = pNode->next;
TreeLinkNode* current = pNode;
while(parent != NULL && current == parent->right) // 如果该结点是它父结点的右子结点,不断沿着它父节点找,
{ // 直到找到一个是它父节点的左子结点
current = parent;
parent = parent->next;
}
nextNode = parent; // 如果该结点是它父节点的左结点,它下一个结点就是它的父结点
}
return nextNode;
}
};
分析:代码注释非常详尽了,不赘述。牛客网这题给的例程不好, next 其实表示的是父结点。
相关文章推荐
- 剑指offer面试题[58]-二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer 面试题58 二叉树的下一个结点
- 剑指offer——面试题58:二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer--面试题8:二叉树的下一个结点
- 剑指offer 二叉树的下一个结点
- [剑指offer]二叉树的下一个结点
- 剑指 offer 二叉树的下一个结点 @python
- 剑指offer(五十七)之二叉树的下一个结点
- 【剑指offer】面试题8:二叉树的下一个节点
- 面试题58:二叉树的下一个结点
- 剑指offer-二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- 面试题58:二叉树的下一个结点
- 剑指offer—二叉树的下一个结点
- 剑指Offer--058-二叉树(中序遍历)的下一个结点
- 面试题58:二叉树中的下一个结点
- 剑指offer:二叉树的下一个结点