首先得到节点控件的实例,因为不知道你是用的什么语言。 我就只能给你举例。
例如TreeNode treenode1,获得之后,找到实例控件的,你想得到的节点,比如当前选中的,一般都是Selected的一类属性。 然后这个属性之后,应该有一个allNodes属性之类的。 就可以得到了。
因为不知道你的语言,也不能给出具体的方法名称。你可以自己实践一下,一步一步来很简单的。
算法思想:
对每个节点来说:
1、如果它没有子节点,那么它就是叶子节点。
2、如果它有子节点,那么它的叶子节点数量 = 左子树叶子节点数量 + 右子树叶子节点数量。
算法代码:
unsigned int getLeafCount(struct node node){
if(node == NULL)
return 0;
if(node->left == NULL && node->right==NULL)
return 1;
else
return getLeafCount(node->left)+
getLeafCount(node->right);
}
时间复杂度:O(n),空间复杂度:O(n)
---------------------------------------------------
附上一个例子:
#include <stdioh>#include <stdlibh>
/ A binary tree node has data, pointer to left child
and a pointer to right child /
struct node
{
int data;
struct node left;
struct node right;
};
/ Function to get the count of leaf nodes in a binary tree/
unsigned int getLeafCount(struct node node)
{
if(node == NULL)
return 0;
if(node->left == NULL && node->right==NULL)
return 1;
else
return getLeafCount(node->left)+
getLeafCount(node->right);
}
/ Helper function that allocates a new node with the
given data and NULL left and right pointers /
struct node newNode(int data)
{
struct node node = (struct node)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
/Driver program to test above functions/
int main()
{
/create a tree/
struct node root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
root->left->right = newNode(5);
/get leaf count of the above created tree/
printf("Leaf count of the tree is %d", getLeafCount(root));
getchar();
return 0;
}
以上就是关于有没有什么方法能获得一个节点下的【所有节点】,包括子节点和孙节点全部的内容,包括:有没有什么方法能获得一个节点下的【所有节点】,包括子节点和孙节点、求统计二叉树叶子结点数的递归算法、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)