求二叉樹的雙親結點

2021-10-07 21:55:22 字數 1363 閱讀 5159

思路就是如果當前任乙個孩子結點的值等於k,說明當前節點即為所需結點的雙親結點,通過遞迴實現唯一比較麻煩的是要寫很多條件,不然會報錯。

主要功能實現是preorder函式其他是構建和列印二叉樹的函式。

#include

#include

#include

using namespace std;

#define type char

//要求1.二叉樹中的結點個數2.葉子結點個數3.某結點層次4.二叉樹的寬度

struct treenode};

class tree

k = p - in;

b->left =

createfromarray

(pre+

1,in,k)

; b->right =

createfromarray

(pre+k+

1,p+

1,n-k-1)

;return b;

}void

print

(treenode *tr)

if(tmp->right!=

null)}

printf

("\n");

}}void

preorder

(treenode *bt, type x)

else

if(bt->right !=

null

&& bt->right->val == x)

else

if(bt->right !=

null)}

}}};

intmain()

;//前序

type b=

;//中序

int n =8;

int choose =0;

treenode *new_bt;

//建立結點

tree bt1;

//建立類

new_bt = bt1.

createfromarray

(a,b,n)

; bt1.

print

(new_bt)

; bt1.

preorder

(new_bt,

'g')

;return0;

}

二叉樹如圖所示:

執行結果:

求二叉樹某個結點的祖先

考試做到這一題,當時寫的很亂,這讓我很煩,題目就是在二叉樹查詢某個值的結點,如果找到則輸出該節點的所有祖先,那我當時想到的就是用後序遍歷的非遞迴演算法,如果找到的話,棧中的所有元素就是該節點的祖先,不過後序遍歷的話需要用乙個標記記錄棧頂元素,第一次訪問棧頂的元素的時候不出棧,第二次訪問棧頂元素的時候...

求二叉樹中結點的最大距離

距離 是兩結點之間邊的個數。求最大距離存在兩種情況,一是路徑經過左子樹的最深結點,通過根結點,再到右子樹的最深結點。二是不穿過根結點,二是左子樹或右子樹的最大距離路徑中,取其大者。問題的核心在於兩種不同的情況需要不同的資訊,一是需要子樹的最大深度,二是需要子樹的最大距離。遞迴 如下 先序遍歷輸入用例...

二叉樹結點, 排序

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