二叉树中序遍历成双向链表

来源:互联网 发布:淘宝钻展在哪里展示 编辑:程序博客网 时间:2024/05/17 05:50
#include <iostream>using namespace std;struct TreeNode {int value;struct TreeNode *left;struct TreeNode *right;TreeNode(int x):value(x),left(NULL),right(NULL){};};class Solution{public:TreeNode* Convert(TreeNode* pRootOfTree) {TreeNode *pPreTreeNode = NULL;ConvertNode(pRootOfTree, &pPreTreeNode);//如果输入的pRootOfTree = NULL需要输入合法性检查TreeNode *pHeadNode = pPreTreeNode;while (pHeadNode != NULL && pHeadNode->left != NULL){pHeadNode = pHeadNode->left;}return pHeadNode;}void ConvertNode(TreeNode *pCurrentTreeNode, TreeNode **pPreTreeNode) {if (pCurrentTreeNode == NULL) {//输入pRootOfTree = NULL输入合法性检查return;}if (pCurrentTreeNode->left != NULL) {ConvertNode(pCurrentTreeNode->left, pPreTreeNode);}pCurrentTreeNode->left = *pPreTreeNode;if (*pPreTreeNode != NULL) {//中序遍历根节点的左子树的第一个叶子节点出现时,pPreTreeNode=NULL,如果操作(*pPreTreeNode)->right会报错(*pPreTreeNode)->right = pCurrentTreeNode;}*pPreTreeNode = pCurrentTreeNode;if (pCurrentTreeNode->right != NULL) {ConvertNode(pCurrentTreeNode->right, pPreTreeNode);}}};int main(void){TreeNode p1(10), p2(6), p3(14), p4(4), p5(8), p6(12), p7(16);p1.left = &p2;p1.right = &p3;p2.left = &p4;p2.right = &p5;p3.left = &p6;p3.right = &p7;TreeNode *Head = NULL;Solution s;Head = s.Convert(&p1);return 0;}

0 0