剑指offer--面试题8:二叉树的下一个结点
来源:互联网 发布:如何注册淘宝账号 编辑:程序博客网 时间:2024/06/04 19:27
#include <stdio.h>struct BinaryTreeNode{//数据结构 int m_nValue; //数值域 BinaryTreeNode* m_pLeft; //左孩子指针 BinaryTreeNode* m_pRight; //右孩子指针 BinaryTreeNode* m_pParent; //双亲指针};/*如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。 如果没有右子树,且它是父节点的左子节点,那么它的下一个节点就是它的父节点。 如果一个节点即没有右子树,并且它还是父节点的右子节点,这种情况比较复杂。我们可以沿着指向父节点的指针一直向上遍历,直到找到一个是它父节点的左子节点的节点。如果这样的节点存在,那么这个节点的父节点就是我们要找的下一个节点。 如果一个节点不满足上述所有情况,那么它应该就是中序遍历的最后一个节点。所以返回NULL*/BinaryTreeNode* GetNext(BinaryTreeNode* pNode) { if(pNode == NULL) return NULL; BinaryTreeNode* pNext = NULL; if(pNode->m_pRight != NULL) { BinaryTreeNode* pRight = pNode->m_pRight; while(pRight->m_pLeft != NULL) pRight = pRight->m_pLeft; pNext = pRight; } else if(pNode->m_pParent != NULL) { BinaryTreeNode* pCurrent = pNode; BinaryTreeNode* pParent = pNode->m_pParent; while(pParent != NULL && pCurrent == pParent->m_pRight) { pCurrent = pParent; pParent = pParent->m_pParent; } pNext = pParent; } return pNext;}// ==================== 辅助代码用来构建二叉树 ====================BinaryTreeNode* CreateBinaryTreeNode(int value){ BinaryTreeNode* pNode = new BinaryTreeNode(); pNode->m_nValue = value; pNode->m_pLeft = NULL; pNode->m_pRight = NULL; pNode->m_pParent = NULL; return pNode;}void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight){ if(pParent != NULL) { pParent->m_pLeft = pLeft; pParent->m_pRight = pRight; if(pLeft != NULL) pLeft->m_pParent = pParent; if(pRight != NULL) pRight->m_pParent = pParent; }}// 8// 6 10// 5 7 9 11int main(int argc, char* argv[]){ BinaryTreeNode* pNode8 = CreateBinaryTreeNode(8); BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6); BinaryTreeNode* pNode10 = CreateBinaryTreeNode(10); BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5); BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7); BinaryTreeNode* pNode9 = CreateBinaryTreeNode(9); BinaryTreeNode* pNode11 = CreateBinaryTreeNode(11); ConnectTreeNodes(pNode8, pNode6, pNode10); ConnectTreeNodes(pNode6, pNode5, pNode7); ConnectTreeNodes(pNode10, pNode9, pNode11);printf(" 8 \n");printf(" / \\ \n");printf(" 6 10 \n");printf(" /\\ / \\ \n");printf(" 5 7 9 11 \n");printf("中序遍历序列为:5 6 7 8 9 10 11\n");printf("5的中序遍历下一个结点为:%d\n",GetNext(pNode5)->m_nValue);printf("6的中序遍历下一个结点为:%d\n",GetNext(pNode6)->m_nValue);printf("7的中序遍历下一个结点为:%d\n",GetNext(pNode7)->m_nValue);printf("8的中序遍历下一个结点为:%d\n",GetNext(pNode8)->m_nValue);printf("9的中序遍历下一个结点为:%d\n",GetNext(pNode9)->m_nValue);printf("10的中序遍历下一个结点为:%d\n",GetNext(pNode10)->m_nValue);printf("11的中序遍历下一个结点为NULL!\n");return 0; }
阅读全文
0 0
- 剑指offer--面试题8:二叉树的下一个结点
- 剑指offer-面试题58:二叉树的下一个结点
- 剑指offer--面试题58:二叉树的下一个结点
- 剑指offer-面试题58-二叉树的下一个结点
- 剑指offer 面试题58 二叉树的下一个结点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- 剑指offer面试题[58]-二叉树的下一个结点
- [剑指offer]面试题58:二叉树中的下一个结点
- 《剑指Offer》学习笔记--面试题58:二叉树的下一个结点
- 【剑指Offer学习】【面试题58:二叉树的下一个结点】
- 剑指offer——面试题58:二叉树的下一个结点
- 【剑指offer】面试题 8:二叉树的下一个节点
- 【剑指offer】面试题8:二叉树的下一个节点
- 剑指offer--二叉树的下一个结点
- 《剑指offer》二叉树的下一个结点
- 《剑指offer》-- 二叉树的下一个结点
- 剑指offer:二叉树的下一个结点
- NDK jni 加载静态库
- oracle数据库中查询一张表中的所有列及其列的数据类型
- stm32单步调试正确,全速运行错误
- GoCD部署
- Android Studio Gradle配置相关问题
- 剑指offer--面试题8:二叉树的下一个结点
- Unity3d热更新二
- css中设置半透明
- structs2工作原理
- 当apk后台运行时,进行语言切换apk死掉
- Android计算当前手机内存使用率
- numpy中关于*和dot的区别
- javastript:setTimeout
- jQuery——选择元素