不用棧,來實現二叉樹的非遞迴中序遍歷

2021-07-08 13:18:38 字數 483 閱讀 4326

如果要求只能用非遞迴方法,同時還不讓用棧,來遍歷完全二叉樹,則每個結點必須有乙個指向父結點的指標。

題目:完全二叉樹,採用三叉鍊錶結構。

要求 不用遞迴,中序遍歷這棵樹。要求空間複雜度是o(1).

分析:題目不讓用遞迴,那就用迭代,同時,空間複雜度是常量級,擺明了不讓用棧。

那就必須是三叉鍊錶了。三叉鍊錶是二叉樹的另一種主要的鏈式儲存結構。三叉鍊錶與二叉鍊錶的主要區別在於,它的結點比二叉鍊錶的結點多乙個指標域,該域用於儲存乙個指向本結點雙親的指標。

有了父指標,那就用父指標來進行回溯。

感覺不難,理清思路後比較簡單。先寫乙個,明天看看對不對。

void inorder_iteration_withoutstack(tritreeptr t)

else //否則,就要向上回溯

}else//從右子樹回溯的,則繼續向上多回溯乙個

}} }

}

不用棧實現二叉樹非遞迴中序遍歷

偶爾看到這樣乙個問題 有個二叉樹,每個節點除了左右指標外,還有乙個指向父節點的指標。要求不用遞迴,中序遍歷這棵樹。另要求空間複雜度是o 1 空間複雜度為o 1 擺明就是不讓用堆疊模擬遞迴,所以想了想思路,也請教過好幾個朋友,大家都基本想法都差不多,由於有指向父節點的指標,必定可以回溯,從而可以不需要...

非遞迴中序遍歷二叉樹

非遞迴中序遍歷二叉樹 include define maxsize 100 typedef char datatype 二叉鍊錶型別定義 typedef struct binnode binnode,bintree 順序棧型別定義 typedef struct seqstk 初始化棧 int ini...

二叉樹的非遞迴中序遍歷

最近在溫習資料結構,通常網上看到的二叉樹非遞迴中序遍歷如以下形式 define maxnode 100 二叉樹最大節點數 定義二叉樹鏈式結構 typedef struct bitnode bitnode,bitree 二叉樹進行中序非遞迴遍歷 void nrinorder bitree t stac...