我在这里看了几篇其他类似的文章,但并没有完全解决我的问题。我的作业要求我为二叉树中的每个节点分配其相应的深度。但我还是无法理解。
以下是我的代码:
struct treeNode {
int item;
int depth;
treeNode *left;
treeNode *right;
};
typedef treeNode *Tree;
int assignDepth(Tree &T, int depth)
{
if(T!=NULL)
{
depth = assignDepth(T->left, depth++);
T->depth = depth;
depth = assignDepth(T->right, depth++);
}
else //leaf
return depth--;
}
我尝试用笔和纸运行它,看起来还可以,但我的桌面检查技巧显然不足。
请问有人可以指点我一下吗?这是我第一次使用树形结构,递归不是我的强项。
答案:
void treecoords(Tree &T, int depth)
{
static int count = -1; //set to -1 so the precrement before assignment doesn't give the wrong values
if(T!=NULL)
{
treecoords(T->left, depth+1); //depth decrements automatically once this function call is removed from the stack
count++;
T->x = count;
T->y = depth;
treecoords(T->right, depth+1);
}
}