二叉排序树的插入和遍历

输入过程中会卡住无法继续输入
源代码如下
#include
#include

using namespace std;

struct Tnode //创建二叉树类型
{
string word;
int count;//重复出现的单词次数
Tnode left;
Tnode *right;
};
struct Tree{
Tnode
root;
};

void insert(Tree*,string);
void inorder(Tnode*);
void preorder(Tnode*);

int main()
{
Tree tree;
tree.root = nullptr;

string word;

while(1) 
{
    cin >> word;
    insert(&tree,word);
    if(!cin)
    break;
}

preorder(tree.root);
inorder(tree.root);

return 0;

}

void insert(Tree* tree,string word)//插入操作
{
Tnode *s;
s = new Tnode;

s->word = word;
s->left = nullptr;
s->right = nullptr; 

if(tree->root == nullptr)//判断是否为空树
    tree->root = s;
else {
    Tnode* temp = tree->root;
    while(temp != nullptr){
        if(word < temp->word){
            if(temp->left == nullptr){
                temp->left = s;
                return;
            }
            else{
                temp = temp->left;
            }
        }
        else if(word > temp->word){
            if(temp->right == nullptr){
                temp->right = s;
                return;
            }
            else{
                temp = temp->right;
            }
        }
        else{
            temp = s;
            s->count++;
        }
    }
} 

}

void preorder(Tnode* node)//先序遍历
{

cout << "先序遍历:" << endl;
if(node != nullptr)

{

cout << node->word << " " << node->count << " ";

preorder(node->left);

preorder(node->right);

}    

}

void inorder(Tnode* node)//中序遍历
{
cout << "中序遍历:" << endl;
if (node != nullptr)
{
inorder(node->left);
cout << node->word << " " << node->count << " ";
inorder(node->right);
}
}
图片说明

希望大佬帮我看看是哪里的问题

left前面是不是少了指针