建立二叉樹 易出錯的地方

2021-10-10 16:00:15 字數 1945 閱讀 8240

#include #include typedef struct node

node;

node* createnode(int value)

void addnode(node *root, int value)

else

else

}}int main()

; node* tree_root = createnode(values[0]);

for (int i = 1; i < 11; i++)

middleoder(tree_root);

printf("\n");

return 0;

}

很多兄弟在建立二叉樹的時候都喜歡用上邊的方式來建立,但是最終卻沒有得到想要的結果,至於原因待會兒給大家分析分析

tree_root值0x0069e418  位址0x0030fb5c

root值0x0069e418  位址0x0030fa78

tree_root值拷貝給了 root,兩個不同的指標變數指向了同一塊位址

以上是第一步,tree_root 不為null,所以要遞迴執行addnode()  也就是第二次執行了  下邊是各指標變數的情況 

第二次呼叫addnode時,形參root對應的是 tree_root的leftchild,root被重新賦值為createnode()返回的物件 0x0069e450,但是tree_root 依然為null  這就是根本原因。。。。。。。。

原因:tree_root的左指標是null,addnode(root->leftchild,value)的時候 拷貝給了形參root

假設root->leftchild 是a  指向null  傳給root時拷貝了乙份  就是b了 同樣指向null,b被賦值createnode(value)也就是b重新指向了別的地方了,a依然指向的是null。。。。。。b和a沒有任何關係

所以。。。。。。。

正確的**除錯說明

以上就是**更改部分

下邊就是除錯截圖

1:main中 addnode 第一次開始執行的時候  value 是3

執行addnode()前

遞迴呼叫addnode()

*root被賦值

一輪遞迴結束

3已經被新增進去,此時tree_root的leftchild 已經被重新賦值,不在指向null

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...

二叉樹的建立 遍歷1 建立二叉樹

談二叉樹,如果二叉樹都沒有正確的建立出來,那豈不是紙上談兵!括號表示式 表示方法 1.括號 括號內的東西是括號前的元素的孩子 2.逗號 逗號是為了區分左右孩子 演算法分析 給出乙個如上的括號表示式 a b d g e,f 再利用棧這個資料結構,分析一下 掃瞄整個括號表示的字串,這個字串中只有四種字元...

建立二叉樹

今天看到了乙個資料結構的筆試題目,他要求寫出建立二叉樹的程式。我想練習練習,所以想了一下其大致的思路,記錄如下 題目的要求很簡單,給出乙個字串序列 比如說a b d,e h j,k l,m n c f,g i 然後要求按照其規則建立二叉樹,題目不難但是卻花費了我不少的時間 第一步,我想到的是需要什麼...