剑指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; } }
讯享网

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