基於中序遍歷找到乙個結點的後繼結點

2021-09-07 05:49:22 字數 1403 閱讀 8361

題目:

基於中序遍歷找到乙個結點的後繼結點。

分析:首先明白中序遍歷,順序為:左--->根----->右

如果當前結點為p。

有兩種情況:

1.當p有右子樹時,那麼其右子樹的最左結點即為所求:

2.當p沒有右子樹時。有以下兩種情況:

沿著p向上找,假設p的父結點的左孩子是p。那麼該父結點即為所求。否則繼續向上找。

**:

/*

找到中序遍歷下乙個結點的後繼結點

by rowandjj

2014/8/19

*/#includeusing namespace std;

typedef struct _node_

node,*pnode,*ptree;

//找到中序遍歷時,p的後繼結點

pnode after(pnode p)

if(p->right != null)//存在右子樹

return ptemp;

}else//不存在右子樹

return pparent; }}

//構建

void create(ptree *proot,pnode pparent)

*proot = (pnode)malloc(sizeof(node));

if(*proot == null)

(*proot)->data = data;

(*proot)->left = null;

(*proot)->right = null;

(*proot)->parent = pparent;

create(&(*proot)->left,*proot);

create(&(*proot)->right,*proot);

}//中序遍歷

void display(ptree proot)

if(proot->left != null)

cout

if(proot->right != null) }

int main()

{ ptree ptree = null;

create(&ptree,null);

// pnode p1 = ptree->left->right;

// coutdata

//coutright)->datadata<

輸出中序遍歷下最後乙個結點

include include typedef char datatype 樹結構體的定義 typedef struct node bintree bintree root typedef struct stack 棧的結構定義 seqstack void push seqstack s bintr...

演算法 求乙個節點的後繼節點 中序遍歷

public class node 以上樹節點的結構中增加了指向父節點的引用。基於上述節點結構,若想求中序遍歷中乙個節點的後繼節點,該如何求?在中序遍歷中,對於乙個節點來說,若它有右子樹,則右子樹上最左節點即為該節點的後繼節點。若無右子樹,則從該節點開始,沿著父節點引用往上掃瞄,看是否在父節點的左分...

找出中序遍歷順序的下乙個結點

問題描述 給定一顆二叉樹和其中乙個節點,找出中序遍歷序列的下乙個節點!樹中的每個節點有 左 右 父 三個指標域。不是所有的節點都有其下乙個節點,所以結果可能為 null 根節點的父節點為 null 節點的定義如下 struct treelinknode 給定乙個二叉樹 問題分析 1.如目標節點有 右...