日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

二叉树的下一个结点

發布時間:2025/5/22 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二叉树的下一个结点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點并且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

思路

我們以上圖為例進行講解,上圖二叉樹的中序遍歷是d,b,h,e,i,a,f,c,g。我們以這棵樹為例來分析如何找出二叉樹的下一個結點。

  • 結點有右子樹,那么它的下一個結點就是它的右子樹的最左子結點。也就是說從右子結點出發一直沿著指向左子樹結點的指針,我們就能找到它的下一個結點。例如,圖中結點b的下一個結點是h,結點a的下一個結點是f。
  • 結點沒有右子樹的情形。
  •     1>如果結點是它父結點的左子結點,那么它的下一個結點就是它的父結點。例如,途中結點d的下一個結點是b,f的下一個結點是c。

        2>如果一個結點既沒有右子樹,并且它還是父結點的右子結點,這種情形就比較復雜。我們可以沿著指向父結點的指針一直向上遍歷,直到找到一個是它父結點的左子結點的結點。

          如果這樣的結點存  在,那么這個結點的父結點就是我們要找的下一個結點。例如,為了找到結點g的下一個結點,我們沿著指向父結點的指針向上遍歷,先到達結點c。由于結點c是

          父結點a的右結點,我們繼續向上遍歷到達結點a。由于結點a是樹的根結點。它沒有父結點。因此結點g沒有下一個結點。

    #include <iostream> using namespace std;struct node {int val;struct node *l,*r,*p; }; class BTree {public:BTree();void create(struct node *&r);void add_parent(struct node *&r,struct node *p);node *get_next(struct node *r);struct node *root; }; BTree::BTree() {root=NULL; } void BTree::create(struct node *&r) {int x;cin>>x;if(x==0)return;else{r=new node();r->val=x;create(r->l);create(r->r);} } void BTree::add_parent(struct node *&r,struct node *p) {if(r==nullptr)return;r->p=p;p=r;add_parent(r->l,p);add_parent(r->r,p); } node *BTree::get_next(struct node *r) {if(r==nullptr)return nullptr;if(r->r!=nullptr){struct node *curr=r->r;while(curr->l!=nullptr)curr=curr->l;return curr;}else if(r->p!=nullptr){struct node *curr=r;struct node *p=curr->p;while(p!=nullptr&&curr==p->r){curr=p;p=p->p;}return curr;}return nullptr; } int main() {BTree b;b.create(b.root);b.add_parent(b.root,nullptr);struct node *t=b.get_next(b.root);//測試 if(t!=nullptr)cout<<t->val<<endl;elsecout<<" 該結點無下一個結點."<<endl;return 0; }

    ?

    轉載于:https://www.cnblogs.com/tianzeng/p/10129024.html

    總結

    以上是生活随笔為你收集整理的二叉树的下一个结点的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。