[Leetcode] Flatten Binary Tree to Linked List

来源:互联网 发布:系统重装win10软件 编辑:程序博客网 时间:2024/05/18 02:04

题目:

Given a binary tree, flatten it to a linked list in-place.

For example,
Given

         1        / \       2   5      / \   \     3   4   6

The flattened tree should look like:
   1    \     2      \       3        \         4          \           5            \             6
将二叉树转换为链表,注意到输出的顺序跟前序完全一样,所以自然想到在前序遍历的基础上稍作修改。

void flatten(TreeNode *root) {if(root==NULL) return ;TreeNode *x=NULL;stack<TreeNode*> stk;stk.push(root);while(!stk.empty()){                x=stk.top();stk.pop();if(x->right !=NULL) stk.push(x->right);if(x->left !=NULL) stk.push(x->left);x->left=NULL;                          //增加的地方;if(!stk.empty()) x->right=stk.top();else x->right=NULL;}}

扩展:按照中序遍历的顺序将二叉树转换为双向链表。


其方法也是在中序遍历的基础上修改节点。

TreeNode * bintreeToList2(TreeNode *x){stack<TreeNode *> stk;TreeNode *node=x;TreeNode *res=NULL;TreeNode *pre=NULL;int flag=1;while(node != NULL || !stk.empty()){while( node !=NULL){stk.push(node);node=node->left;}node=stk.top();if( flag==1) {res=node;//保存头结点flag=0;}if(pre!=NULL)pre->right=node;//就是这里前一个节点指向栈的下一个,而不是原来的node->left=pre;pre=node ;//更新前一个节点node=node->right ;              //查找右半部分stk.pop();}return res;}



0 0