1. 首页
  2. 编程语言
  3. C++ 
  4. 用C++实现二叉树查找

用C++实现二叉树查找

上传者: 2023-05-30 23:44:05上传 CPP文件 3.42KB 热度 14次

include

include

using namespace std;

const int StackSize = 100;

char target;

class Stack {

public:

Stack() {

top = -1;

}

void Push(char x) {

if (top == StackSize - 1) throw "上溢";

data[++top] = x;

}

char Pop() {

if (top == -1) throw "下溢";

char x = data[top];

top--;

return x;

}

char GetTop() {

if (top < 0) return top;

char x = data[top];

return x;

}

bool Empty() {

return top == -1;

}

private:

char data[StackSize];

int top;

};

struct BiNode {

char data;

BiNode lChild;

BiNode rChild;

BiNode(char ch) {

data = ch;

lChild = rChild = NULL;

}

};

void CreateBiTree(BiNode* &T)

{

char ch;

cin >> ch;

if (ch == '#') T = NULL;

else

{

T = new BiNode(ch);

CreateBiTree(T->lChild);

CreateBiTree(T->rChild);

}

}

void PreOrder(BiNode* T, vector &v)//将树先序遍历

{

if (T)

{

v.push_back(T->data);

PreOrder(T->lChild, v);

PreOrder(T->rChild, v);

}

}

int main()

{

BiNode* T;

CreateBiTree(T);//按照二叉树的前序序列构造一棵二叉树

vector<char> v;
PreOrder(T, v);//将树先序遍历

Stack S;//定义一个栈

cout << "输入你要搜索的字符:" << endl;
cin >> target;

for (int i = 0; i < v.size(); i++)
{
    if (v[i] == target)//如果找到了目标字符,就输出路径
    {
        cout << "查找结果为:" << endl;
        for (int j = 0; j < S.top + 1; j++)
            cout << S.data[j] << " ";
        cout << v[i] << endl << endl;
    }
    else//如果没找到就记录当前结点
        S.Push(v[i]);
}
cout << "查找结束!" << endl;

}

下载地址
用户评论