面試8 找二叉樹的下個結點

2021-08-21 12:15:58 字數 1825 閱讀 2252

關鍵是舉例和畫圖的思想。

主要分三種型別。

1.有右子樹:返回 右子樹的最左節點。

2.無右子樹:2.有父節點:2.是左結點:返回 父節點。

3.無右子樹:3.有父節點:3.是右節點:找到第乙個是左結點的節點,返回 該節點的父節點。//這裡的while我出了個bug

4.無右子樹:4.無父節點:返回 空。

我的**。 

/*

struct treelinknode

};*/

class solution

//無右子樹

else

pnext = current->next;} }

//無父結點

else

}return pnext;

}};

網友的python**

#1.有右子樹,返回 右子樹最左邊的結點       

#2.無右子樹,返回 當前結點成為左子樹跟時的父節點

# -*- coding:utf-8 -*-

# class treelinknode:

#     def __init__(self, x):

#         self.val = x

#         self.left = none

#         self.right = none

#         self.next = none

class solution:

def getnext(self, pnode):

# write code here

if pnode is none:

return none

#1.有右子樹,為右子樹最左邊的結點

if pnode.right is not none:

node=pnode.right

while node.left is not none:

node=node.left

return node

#2.無右子樹,為當前結點成為左子樹跟時的父節點

if pnode.next is not none:

cur_node=pnode

parent_node=pnode.next

while parent_node is not none and parent_node.left!=cur_node:

cur_node=parent_node

parent_node=cur_node.next

return parent_node

return none

第二種思路

如果無右子樹且父節點存在,只要找到為左結點的節點就好了,返回該節點的父節點。

class solution:

def getnext(self, pnode):

# write code here

if pnode is none:

return none

if pnode.right is not none:

pnode = pnode.right

while pnode.left is not none:

pnode = pnode.left

return pnode

while pnode.next is not none:

if pnode.next.left == pnode:

return pnode.next

pnode = pnode.next

return none

二叉樹結點, 排序

二叉樹結點,排序 1.二叉搜尋樹結點最小距離 給定乙個二叉搜尋樹的根結點 root,返回樹中任意兩節點的差的最小值 對這個序列相鄰相減,取最小值即可。實現時,可以優化掉這個序列。在遍歷時記錄上乙個訪問的節點值,和當前節點相減,記錄下最小值即可 定義樹節點 public class treenode ...

二叉樹刪除結點

二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...

DS二叉樹 二叉樹之父子結點

題目描述 給定一顆二叉樹的邏輯結構如下圖,先序遍歷的結果,空樹用字元 0 表示,例如ab0c00d00 建立該二叉樹的二叉鏈式儲存結構。編寫程式輸出該樹的所有葉子結點和它們的父親結點 輸入 第一行輸入乙個整數t,表示有t個二叉樹 第二行起,按照題目表示的輸入方法,輸入每個二叉樹的先序遍歷,連續輸入t...