劍指offer 8 二叉樹的下乙個結點

2021-09-20 18:49:31 字數 1289 閱讀 5308

#include#include#includetypedef int  datatype;

typedef struct bstreenode bstreenode;

bstreenode *createnode(int data)

首先利用棧實現二叉樹的非遞迴中序遍歷,從根結點開始,當根結點不為空或者棧不為空的條件下,開始遍歷左子樹。每遍歷乙個結點,當前結點就入棧(結點為null不入棧)。當遍歷到葉子結點時返回到葉子結點的父節點,開始遍歷右子樹(即彈出棧頂元素,此時棧頂的元素為葉子結點的父節點,此時遍歷父節點的右子樹)。

當在遍歷過程中找到給定的結點時,標記此節點,以此節點為當前結點遍歷二叉樹,找到此節點在二叉樹中序遍歷序列中的下乙個結點時,列印此結點data值即可。

有關棧的定義如下:

#includestruct  bstreenode;

typedef struct bstreenode * qdatatype;

#define maxsize (100)

typedef structstack;

void stackinit(stack *ps)

void stackdestory(stack *ps)

void stackpush(stack *ps, qdatatype data)

void stackpop(stack *ps)

qdatatype stacktop(const stack *ps)

int stacksize(const stack *ps)

int stackempty(const stack *ps)

**如下:

void    inorderloopfind(bstreenode *root,datatype  data1)

//top的左子樹已經遍歷

top = stacktop(&stack);

stackpop(&stack);

//在樹中遍歷到給定的那個結點

if (top->data == data1)

//top的左子樹已經遍歷

top = stacktop(&stack);

stackpop(&stack);

//列印當前結點

printf("%d", top->data);

}} //利用子問題的思想遍歷top右子樹

cur = top->right; }

}

劍指Offer 8 二叉樹的下乙個節點

給定一棵二叉樹和其中的乙個結點,如何找出中序遍歷順序的下乙個結點?樹中的結點除了有兩個分別指向左右子結點的指標以外,還有乙個指向父結點的指標。主要分為兩種情況 如果乙個節點的右子樹不為空,那麼在中序遍歷的下乙個節點就是其 右子樹的最左節點 如果乙個節點的右子樹為空,那麼在中序遍歷的下乙個節點就是其 ...

劍指offer 8 二叉樹的下乙個節點

給定乙個二叉樹和其中乙個節點,找出該節點在中序遍歷序列中的下乙個節點。注意 樹中的節點除了有兩個分別指向左右子節點的指標,還有乙個指向父節點的指標。如果給定的節點是中序遍歷序列的最後乙個,則返回空節點。二叉樹一定不為空,且給定的節點一定不是空節點。分情況討論即可,如下圖所示 如果當前節點有右孩子,則...

劍指Offer 8 二叉樹的下乙個結點

nowcode 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。public class treelinknode public class treelinknode public class solution e...