求根结点到x结点的路径(假定结点不重复)。
输入样例:
输入一行字符序列先序递归构建二叉树。每个字符对应一个结点,#表示空结点。第二行输入一个结点值x。
52#3##41##6##
3
输出样例:
输出从根到结点x的路径。
5 2 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
ACcode:
#include<iostream>
using namespace std;
struct TreeNode {
char data;
TreeNode* lchild;
TreeNode* rchild;
//TreeNode* father;
};
TreeNode* create_tree(string, int&);
void find_road(TreeNode*, char, char*, int);
int main(){
string s; char x;
cin >> s>>x;
int index = 0;
TreeNode* tree= create_tree(s,index);
char vis[10] = {'0'};
find_road(tree,x,vis,1);
}
TreeNode* create_tree(string s,int& index) {
if (index == s.length()) {
return NULL;
}
else if (s[index] == '#') return NULL;
TreeNode* new_node = new TreeNode({s[index],NULL,NULL});
new_node->lchild = create_tree(s,++index);
new_node->rchild = create_tree(s, ++index);
return new_node;
}
void find_road(TreeNode* T ,char x,char *vis,int level) {
if (!T) return;
vis[level] = T->data;
if (T->data == x) {
for (int i = 1; i <= level; i++) cout<<vis[i]<<" ";
exit ;
}
find_road(T->lchild, x, vis, level + 1);
find_road(T->rchild, x, vis, level + 1);
}