剑指offer08二叉树的下一个结点(中等)题解

剑指offer08二叉树的下一个结点(中等)题解剑指 offer08 二叉树的下一个结点 中等 题解 1 若该结点右子树不为空 则中序遍历的下一个结点是其右子树的最左端 2 若该结点右子树为空 则使用 while 循环找到是其父节点的左结点的结点 struct BinaryTreeNo int m nValue struct BinaryTreeNo m pLeft

大家好,我是讯享网,很高兴认识大家。

剑指offer08二叉树的下一个结点(中等)题解

1.若该结点右子树不为空,则中序遍历的下一个结点是其右子树的最左端;


讯享网

2.若该结点右子树为空,则使用while()循环找到是其父节点的左结点的结点。

/* struct BinaryTreeNode { int m_nValue; struct BinaryTreeNode *m_pLeft; struct BinaryTreeNode *m_pRight; struct BinaryTreeNode *m_pParent; BinaryTreeNode(int x) :m_nValue(x), m_pLeft(NULL), m_pRight(NULL), m_pParent(NULL) { } }; */ /无需使用递归*/ BinaryTreeNode* GetNext(BinaryTreeNode* pNode) { if (pNode == NULL) return NULL; //情况一:若该结点右子树不为空,则根据其右结点是否有左子树判断中序遍历的下一个结点 //情况二:若该结点右子树为空,则可用while()循环找到是其父节点的左结点的结点 if (pNode->m_pRight) { if (pNode->m_pRight->m_pLeft) { return pNode->m_pRight->m_pLeft; } else { return pNode->m_pRight; } } else { BinaryTreeNode* pCurrent = pNode; BinaryTreeNode* pParent = pNode->m_pParent; while ((pParent) && (pCurrent == pParent->m_pRight)) { pCurrent = pCurrent->m_pParent; pParent = pCurrent->m_pParent; } return pParent; } }

讯享网

 

小讯
上一篇 2025-04-05 08:08
下一篇 2025-01-11 11:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119803.html