我想學習遞歸,所以我嘗試了一個程序來創建一個完整的二叉樹,然後打印其所有元素的總和,我自己寫了插入部分,我困惑的是我的指針變量"curr"
它指向一個樹節點,爲什麼我能夠做"curr = curr->left"
,因爲它只是一個指向節點的指針。不僅應該在實際的樹節點中包含這些左右字段嗎?只要給我一個關於這個新手的疑問。我很驚訝我的計劃能夠完成這項工作。添加到一個完整的二叉樹使用遞歸C
謝謝:)
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node *left,*right;
};
struct node *head = NULL;
struct node *curr = NULL;
void insert_Data(int val,struct node* curr){
struct node *tempnode = (struct node*)malloc(sizeof(struct node));
tempnode->data = val;
tempnode->left = NULL;
tempnode->right = NULL;
if(head==NULL){
head = tempnode;
curr = head;
printf("head element is : %d\n",head->data);
}
else{
if(curr->left == NULL){
curr->left = tempnode;
}
else if(curr->right == NULL){
curr->right = tempnode;
}
else{
curr = curr->left;
insert_Data(val,curr);
}
}
}
//to test program
int sumNode(struct node* root) {
// if there is no tree, its sum is zero
if(root == NULL) {
return 0 ;
} else { // there is a tree
printf("element is = %d\n",root->data);
return root->data + sumNode(root->left) + sumNode(root->right) ;
}
}
int main() {
int arr[] = {1,2,3,4,5,6,7,8,9};
int i;
for(i=0;i<9;i++){
insert_Data(arr[i],head);
}
int result = sumNode(head);
printf("\n\n%d",result);
return 0;
}
'curr'是一個指向'node'結構實例的指針。 'node'結構的成員有'left'和'right'。我不確定你的困惑來自哪裏? –
感謝您的快速回復@some程序員哥們,其實我的困惑是我們創建的指向實際節點的節點指針是否也包含這些字段作爲實際節點呢? –
也許這有助於:curr-> left與(* curr).left相同。指針不包含任何字段。它只是指向那個結構。 –