1樓:網友
你的問題主要是在建立的過程中f在右移,而m不變,而你的pos是f和m通用的,所以出錯了。
#include
#include
typedef struct node
char data;
struct node *lchild,*rchild;
btnode;
btnode *createtree(char *f, char *m, int b)
btnode *n;
int i, pos; /pos記錄根位置。
if (*f ==0') return null; /先序用建完了。
if (b<=0) return null; /下界比上界還大了。
基本項: 建立乙個先序結點。
n = btnode *)malloc(sizeof(btnode));
if (!n) return null;
n->data = f;
在中序 [a, b] 找 *f
pos = 1;
for (i=0; ilchild = createtree(f + 1, m,pos);
n->rchild = createtree(f + pos+1, m+pos+1, b-pos);
return n;
int main()
btnode *t;
t = createtree("acbed","cbade",5);
system("pause");
2樓:網友
你的m沒變,子函式執行建立右孩子時,這時的m是右子樹的中序遍歷的根節點。
你看這裡這樣行不:
n->lchild = createtree(f + 1, m, a, pos - 1);
n->rchild = createtree(f + pos+1, m+1, pos+1, b);
return n;
二叉樹問題
3樓:網友
葉子結點個數n0 = n2 + 1 = 23 + 1 = 24,因此度為1結點個數n1 = 47 - 23 - 24 = 0,因此該二叉樹中只有度為0和度為2的結點,通稱正規(正則)二叉樹,最小深度等於同樣結點數量的完全二叉樹=log2(n) +1= 6,最大深度=(47 + 1) / 2 = 24
關於二叉樹的問題
4樓:子夜楊旭
設乙個二叉樹中的節點總數為n,a為二叉樹中度為1的節點數,b為度為2的節點數,c為度為0的節點數。二叉樹所有節點的度小於等於2,所以總的節點數為n=a+b+c<1>,這個知道吧?再看二叉樹的分支數。
除了根節點外,其餘節點都有都有乙個分支進入,乙個分支對應乙個節點。設b為分支總數,則n=b+1.又由於這些分支是有度為二和一的節點射出來的,所以又有b=a+2b,於是得n=a+2b+1<2>,有以上,<1><2>兩個式子可以得到c=b+1 呵呵 加油啊 !
二叉樹結點問題
5樓:網友
1全部有5種。給定n個節點,能構成h(n)種不同的二叉樹。h(n)為卡特蘭數的第n項。
h(n)=c(2n,n)/(n+1)。 n=3的時候 h(n)=c(6,3)/4=5.
1. 滿二叉樹 2層。
2.第一層為根節點,第二層為根節點的左子樹,第三層為第二層的左子樹。
3.第一層為根節點,第二層為根節點的右子樹,第三層為第二層的右子樹。
4.第一層為根節點,第二層為根節點的左子樹,第三層為第二層的右子樹。
5.第一層為根節點,第二層為根節點的右子樹,第三層為第二層的左子樹。
二叉樹的乙個問題
6樓:養海瑤
這個還真是沒法算,按二叉樹的定義,高度為k的二叉樹最多有2^k - 1個結點,這個是最多,最少呢,就是k個。
如果是完全二叉樹的話,就能確定在log2(i)+1層上。
舉個例子你可能能更深刻地體會。a/
b/ ca \b c
可以看到,b和c可以在不同的層,但節點個數都只有3個,換句話說,對二叉樹結點的計算是從k~2^k -1,那麼,在k和2^k - 1這個區間是有多少交點呢,我們假設k為3,則3層的二叉樹的節點個數從3~7不等,而如果當k=4的話,則4層的二叉樹的節點個數從4~15不等,所以從這2種情況就可以得到,對於普通的二叉樹而言,是無法定位當前節點在二叉樹中的層數的,只有完全二叉樹才能定位,如果當前結點為11,則其所在層數一定是log2(11)+1= 3.
如果還不清楚,可以再補充提問。
7樓:
大哥 你這啥問題啊 你那非空二叉樹是完全二叉樹嗎 不是完全二叉樹 這個問題無意義。如果是非空二叉樹的話是這樣:[log2(i)]=[log2(j)],其中[ ]為取不超過該值的最大整數,log2(i)指的是以2為底數i的對數。
二叉樹的問題
8樓:酋長的爺爺
後序遍歷最後乙個結點肯定是根結點,於是數根為c;據此由中序遍歷知左子樹含deba結點,右子樹為空;然後同理分析左子樹:根為e,它的左子樹含d,右子樹含ba;繼續分析其右子樹:根據後序知根為b,由中序知其右子樹為a。
分析完畢,得到原樹為:c/
e/ \d b\
a前序遍歷得:cedba選d。
一道二叉樹問題
9樓:網友
第六層有8個葉子節點,說明第六層其他的節點還有子節點,最多節點的情況是左右兩個節點都有,第七層是(2^5-8)*2=48,再加上前六層的節點2^6-1=63,所以是111
二叉樹問題,求詳解!
10樓:1藍天下的雨
用上面的公式是做不出來的,根據k層完全二叉樹的最多的節點個數公式:2^k-1及第k層最多節點個數公式2^(k-1)做,699個節點則,最多10層,並且1-9層都滿了,共511個節點(根據公式2^k-1),則剩下的188個節點在第10層上,第9層共256個節點(根據公式2^(k-1)),第10層的188個節點需要佔用188/2=94個第9層的節點,則第九層還剩256-94=162個節點沒有被佔用及為葉子節點,加上第10層的188個葉子節點,總共162+188=350個葉子節點!手都酸了~~~
乙個二叉樹應用問題
11樓:老馮文庫
由題意可知,這是乙個最優二叉樹(赫夫曼樹,huffman tree)問題。
先以a、b、c、d、e為五個結點構造一棵赫夫曼樹,結點權重採用產品分佈值(,
最優的判定過程是先判定d、e、c,最判定a、b:
if(p>=5 &&p<6) /* 判定d */else if(p<5) /* 判定e */else if(p<7) /* 判定c */else if(p > 8) /* 判定a */else /* 判定b */
總的判定次數是:
二叉樹的一些問題
答案正確啊,如下圖 經改正後能正常執行,無限輸入主要是由於scanf引起的詳細請看 注意構建樹的輸入順序 比如要構建 1 2 5 3 4 這棵樹,則輸入應為1 2 3 4 5 include stdio.h include malloc.h define maxsize 100 typedef ch...
今天去平安保險公司面試,遇到了一些問題
曲江神友 你的理解基本是對的。人壽保險行業都喜歡說上面那句話,其意為現在做保險的都是人才,這是一種激將方法,就是你來做就是人才了,不來做就不是人才了!而保險行業的真實情況是人才奇缺,其最大的表現是保險公司之間互相高薪挖角,造成保險公司經營成本虛高,嚴重損害保險公司自己的利益。其次是保險從業人員社會地...
假如一對深愛的情侶,遇到了一些問題,真的只有一方離開才能讓另一半更長久的幸福。那麼你會離開嗎
馬梓開博士 那當然離開了。人生的路需要拐彎來走。 路西菲爾 你怎麼知道不能讓對方長久幸福 玄冰攝魄 不會,努力解決問題。如果你累了或者覺得問題難以解決,不妨和他商量一下。總會有辦法的。你離開不是解決問題,而是製造新問題。 那都是瞎扯的,沒有說深愛的,必須離開一個才能讓另一個幸福,當然除非是不治之症,...