二叉树的中序遍历的下一个节点

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

中序遍历:先访问当前节点的左子树,再访问当前节点本身,最后访问当前节点的右子树。 因此: 如果给定节点有右子树,则下一个节点是它的右子节点; 如果给定节点没有右子树,需要向上找到一个祖父节点(它是自己父节点的左节点),该祖父节点的父节点就是下一个节点。如果没有找到,返回NULL。

中序遍历顺序为:428591637 如上图中,给定节点9,则无右节点,找到祖父节点2是1的左节点,,返回 1 的节点;给定 7 ,最后找到 1 的父节点为NULL,返回NULL

struct BinaryTreeNode {intm_nValue;BinaryTreeNode*m_pLeft;BinaryTreeNode*m_pRight;BinaryTreeNode*m_pParent; };BinaryTreeNode* GetNext(BinaryTreeNode* pNode) {if (pNode == NULL)return NULL;BinaryTreeNode* pNextNode = NULL;// 有右子树,返回右子树中最左的节点if (pNode->m_pRight) {pNextNode = pNode->m_pRight;while (pNextNode->m_pLeft != NULL) {pNextNode = pNextNode->m_pLeft;}} ) {//无右子树BinaryTreeNode* pCurrent = pNode;BinaryTreeNode* pParent = pNode->m_pParent;pCurrent == pParent->m_pRight) {// 向上找到一个节点(它是自己父节点的左节点)pCurrent = pParent;pParent = pCurrent->m_pParent;}pNextNode = pParent;}return pNextNode;}

测试案例见: https://github.com/zhedahht/ChineseCodingInterviewAppendix/blob/master/NextNodeInBinaryTrees/NextNode.cpp

天不负;卧薪尝胆,三千越甲可吞吴。

二叉树的中序遍历的下一个节点

相关文章:

你感兴趣的文章:

标签云: