您的位置:首页 > 其它

【刷题之路】二叉树先序序列化

2016-05-31 09:53 127 查看
将一颗二叉树先序遍历并输出一个字符串,每个数字后加‘!’作为分隔,空节点记为‘#!’

class TreeToString {

public:

    string toString(TreeNode* root) {

        string res;

        string temp;

        stack<TreeNode*> p1;

        TreeNode* cur;

        p1.push(root);

        while(!p1.empty()){   //利用循环先序遍历二叉树

            cur=p1.top();

            p1.pop();

            if(cur==NULL){

                res+="#!"; 

                continue;

            }

            temp=str1(cur->val);  //整型转字符串,可以替换为sprintf函数,功能一样

            temp+='!';

            res+=temp;

            if(cur) p1.push(cur->right);  //即时左右孩子节点为空,依然押入,只有当当前节点为空时停止,与二叉树先序遍历稍有不同

            if(cur) p1.push(cur->left);

            else res+="#!"; 

        }

        return res;

    }

    string str1(int a){

        std::stringstream ss; //字符串流std ,将节点val变为字符串

        ss << a;
return  ss.str();

    }

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  刷题 算法 二叉树