【編程題】二叉樹的下一個結點

題目描述

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

思路解析

本道題是求所傳節點中序遍歷的下一個結點,我們就需要直到中序遍歷的規則“左子樹—>根節點—>右子樹”,我們先看一個二叉樹的中序遍歷。
在這裏插入圖片描述
由上圖我們可以知道,根據中序遍歷我們想要知道所傳節點的下一個節點的情況有兩種:

  1. 所傳節點有右子樹,找到其右子樹的最左下節點。
  2. 所傳節點沒有右子樹
    a. 找到第一個當前節點是父親節點左孩子的節點。
    b. 特殊情況,找到根節點還沒有找到a中所描述的節點,該節點一般是最後中序遍歷的最後一個節點,返回爲null。

代碼

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
import java.util.*;

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode == null)
            return null;
        TreeLinkNode cur = pNode;
        // 1. 如果pNode有右子樹,找齊右子樹的最左下孩子,將其指向
        if(pNode.right != null){
            cur = pNode.right;
            while(cur.left != null){
                cur = cur.left;
            }
            return cur;
        }
        // 2. 如果pNode沒有右子樹,需要找當前節點爲父親節點左孩子的節點
        else{
            while(cur.next != null){
                if(cur.next.left == cur)
                    return cur.next;
                cur = cur.next;
            }
            // 走到這裏,所傳節點爲中序遍歷的最後一個節點
            return null;
        }
    }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章