Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
Elimizde derinliği, eleman sayısı vs bilinmeyen bir ağaç var ve biz bunun yaprak sayısını bulmak istiyoruz, her düğümün left ve right diye iki çocuğu olduğunu düşünürsek, left==NULL ve right==NULL olduğu zaman bu bir yapraktır deyip sayacı artırıyorum, ancak ağacın derinliğini bilmediğim için döngü hiç sonlanmıyor, yaprakları saydıktan sonra döngü hangi şartlarda bitmeli?
ben önce ağacın düğümlerini başka bir fonksiyonda sayıp bir değişkene aktarıyorum, sonra bu değişkeni yaprak sayısını bulan fonksiyona yolluyorum, fonksiyon yaprakları sayarken aynı zamanda düğümleri de sayıyor, eğer bulduğu düğüm sayısı daha önce bulduğum düğüm sayısına eşitse yaprak sayısını döndürüyor, bunu yapmanın daha kolay veya başka bir yolu var mı?
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
iemre
Anadolu
Kayıt: 26.05.2007 |
|
DLR , LDR, LRD şeklinde ağacı dolaştığın fonksiyon ile ağaçta dolaşırken bir değişken tut ve her dolaşılan yaprak için bir arttır.böylece fonksiyon bitiminde bütün ağacı dolaşmış dolayısıyla yaprak sayısınıda bulmuş olursun.
More than one
|
|
Yazar |
|
marakana
Kayıt: 08.03.2007 |
|
#include <stdio.h>
#include <stdlib.h>
struct node{
int info;
struct node *left;
struct node *right;
};
typedef struct node *NODEPTR;
int yapraksayisi=0;
void yaprakdugumler(NODEPTR treeptr)
{
if(treeptr!=NULL){
if(treeptr->left==NULL && treeptr->right==NULL)
yapraksayisi++;
yaprakdugumler(treeptr->left);
yaprakdugumler(treeptr->right);
}
}
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
bu söyledikleriniz doğru, ama struct * tipinde bir verinin bool ile kıyaslanması biraz mantıksız geliyor bana.
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
unforgiven
Kayıt: 12.06.2008 |
|
naranja yazdi | bu söyledikleriniz doğru, ama struct * tipinde bir verinin bool ile kıyaslanması biraz mantıksız geliyor bana. |
struct * tipinde bir verinin bool ile kıyaslanması nerde geçiyor?
|
|
Yazar |
|
naranja
Kraliyet Ailesinden
Kayıt: 18.10.2007 |
|
mesela bu yukardaki kod için, treeptr nin NULL olmadığı durumlar gibi.
Kaybolur hayatIn tarifsiz ahengi;
Zaman bir tablodur düser duvarlardan.
|
|
Yazar |
|
unforgiven
Kayıt: 12.06.2008 |
|
naranja yazdi | mesela bu yukardaki kod için, treeptr nin NULL olmadığı durumlar gibi. |
o kıyaslama bool değil ve zaten bir pointer'ın boş olup olmadığı NULL ile kontrol edilir.
NULL ifadesi stdlib.h kütüphasinde şu şekillerde tanımlı:
#define NULL 0
// ya da
#define NULL 0L
// ya da
#define NULL (void *) 0
şu linkte bu konuda faydalı bilgiler bulabilirsiniz:
http://en.wikipedia.org/wiki/Pointer#The_null_pointer
|
|
Yazar |
|
serdr
Istanbul
Kayıt: 13.07.2006 |
|
Return değeri ile doğrudan çözüm de şık bir çözüm olur.
int say(nodeptr * T){
if(T==null) return 0;
if (T->L==null && T->R==null) return 1;
return say(T->R)+say(T->L);
}
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | |