題目:
基於中序遍歷找到乙個結點的後繼結點。
分析:首先明白中序遍歷,順序為:左--->根----->右
如果當前結點為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.如目標節點有 右...