Algorithm 二叉树的逆时针边界遍历
给定一棵二叉树,从根开始逆时针打印二叉树的边界节点 编辑: 问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左右方式打印,右边界以自下而上的方式打印。” 我遵循了教程 我的代码如下:Algorithm 二叉树的逆时针边界遍历,algorithm,data-structures,binary-tree,Algorithm,Data Structures,Binary Tree,给定一棵二叉树,从根开始逆时针打印二叉树的边界节点 编辑: 问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左右方式打印,右边界以自下而上的方式打印。” 我遵循了教程 我的代码如下: void printLeft(struct node* root) { if(root==NULL) return; if(root->left) {
void printLeft(struct node* root)
{
if(root==NULL)
return;
if(root->left)
{
printf("%d ", root->data);
printLeft(root->left);
}else if(root->right)
{
printf("%d ", root->data);
printLeft(root->right);
}
}
void printRight(struct node* root)
{
if(root==NULL)
return ;
if(root->right)
{
printRight(root->right);
printf("%d ", root->data);
}else if(root->left)
{
printRight(root->left);
printf("%d ", root->data);
}
}
void printLeaves(struct node* root)
{
if(root==NULL)
return ;
printLeaves(root->left);
if(root->left==NULL&&root->right==NULL)
printf("%d ", root->data);
printLeaves(root->right);
}
void printBoundary(struct node* root)
{
if(root==NULL)
return;
printf("%d ", root->data);
printLeft(root->left);
printLeaves(root);
printRight(root->right);
}
但是,上述方法有一个根本缺陷:
考虑二叉树
> 10
> / \
> 5 6
> / \
> 7 8
> /
> 4
> /
> 2
我的代码会失败。你能帮我修一下吗
另外,这不是家庭作业。我正在准备面试,却被困在这里。你认为为什么会出错?输出应为
10,5,2,8,6
,据我所知,这是正确的输出。@RonTeller当前输出应为10,5,7,4,2,8,6。我的代码遗漏了7和4。为什么最后是6而不是5?@Davidisenstat问题陈述指出,二叉树的边界元素将以逆时针方式打印,即树左边界上的元素后跟叶节点,再后跟树右边界上的元素。问题特别提到:“左边界以自上而下的方式打印,叶节点以左-右的方式打印,右边界以自下而上的方式打印。”希望我把问题说清楚。