找到二叉树全部叶子节点的路径
找到二叉树全部叶子节点的路径
描述:根据图示二叉树来找到全部子叶节点的路径。
解决方案:递归+回溯
采用前序遍历恰好可以得到A->B->C的输出。
当没有遍历到子叶节点时 递归向下搜索 类似于 DFS(深度优先搜索)
每当找到子叶节点时 可以选择输出结果到容器中 介于数据结构是c语言实现,我们可以自己动手写一个Vector容器
目的是完成作业:所以该容器属于定制化,不需要太多功能也不用泛型。
/*
* 重写一个char数组容器
*/
struct Vector {
char* Data;
int Maxsize;
int currentSize;
/*
* 容器的默认构造方法
*/
Vector() {
Maxsize = 10;
Data = (char*)malloc(sizeof(int) * Maxsize);
currentSize = -1;
}
/*
* 向容器中尾插数据
*/
void push_back(char x) {
// 数组已经满了,自动扩充数组
if (currentSize + 1 == Maxsize) {
resize();
}
Data[++currentSize] = x;
}
/*
* 尾删法 删除容器最后一个数值
* 只实现逻辑删除
*/
void pop_back() {
if (currentSize != -1) {
currentSize--;
}
}
/*
* 重载运算符实现下标的方式访问
* TODO 未处理下标越界情况
*/
char operator[](int x) {
if (x <= currentSize) {
return Data[x];
}
}
void resize() {
Maxsize += 10;
//重新拷贝一份空间复制
char* temp = (char*)malloc(sizeof(char) * Maxsize);
for (int i = 0; i < currentSize; i++) {
temp[i] = Data[i];
}
Data = temp;
}
};
值得注意的是 我传入的vector是传入引用 这样可以更加清楚的展现递归和回溯过程。
先序遍历过程是隐含的 每次都先把这个root先存入 这样也可以防止最后结果中不含叶节点。
为了理解 建议大家亲手写一下递归和回溯的过程
作者:程序员包子,转载请注明原文链接:https://www.cnblogs.com/coder-baozi/articles/16830245.html
coder-baozi一位菜鸟码农